アプリケーションプロパティとプロファイル
application.properties/ymlで設定を外部化し、プロファイルを定義して、@Valueと@ConfigurationPropertiesで値を注入します。
「アプリケーションプロパティとプロファイル」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全4レッスンが含まれています。
application.propertiesとapplication.ymlの比較
Spring Bootはsrc/main/resources/application.propertiesまたはapplication.ymlから構成を読み込みます。YAMLはキーを繰り返さずに階層構造の構成を記述でき、どちらも機能面では同等です。
# application.properties:
server.port=8080
spring.datasource.url=jdbc:postgresql://localhost/mydb
spring.jpa.hibernate.ddl-auto=validate
# Equivalent application.yml:
server:
port: 8080
spring:
datasource:
url: jdbc:postgresql://localhost/mydb
jpa:
hibernate:
ddl-auto: validate@Valueで値を注入する
@Value("${property.key}")を使用すると、1つのプロパティを注入できます。${key:default}でデフォルト値を追加できます。SpEL式にも対応しています。
@Service
public class PricingService {
@Value("${pricing.vat-rate:0.20}")
private double vatRate;
@Value("${app.name}")
private String appName;
}型安全なバインディングのための@ConfigurationProperties
関連するプロパティのグループを、@ConfigurationPropertiesが付いたJavaのrecordまたはクラスにバインドします。バリデーションアノテーションにも対応しています。
@ConfigurationProperties(prefix = "app.mail")
public record MailProperties(
@NotBlank String host,
@Min(1) @Max(65535) int port,
boolean ssl
) {}
// Bind in Spring Boot 3: @EnableConfigurationProperties(MailProperties.class)プロファイル: 環境を定義する
プロファイルを使用すると、環境ごとに異なる構成を用意できます。特定のプロファイルが有効な場合にだけ、beanやプロパティを有効にできます。
# application-dev.properties (active when profile=dev):
spring.datasource.url=jdbc:h2:mem:testdb
logging.level.com.example=DEBUG
# application-prod.properties (active when profile=prod):
spring.datasource.url=jdbc:postgresql://prod-db/app
logging.level.com.example=WARNプロファイルを有効にする
application.properties、環境変数、システムプロパティ、またはSpring BootのSPRING_PROFILES_ACTIVEを使ってプロファイルを有効にします。
# application.properties:
spring.profiles.active=dev
# Or environment variable:
export SPRING_PROFILES_ACTIVE=prod
# Or JVM argument:
java -Dspring.profiles.active=prod -jar app.jarbeanに@Profileを付ける
@Beanまたは@Componentに@Profile("prod")を付けると、一致するプロファイルが有効な場合にだけ登録されます。
@Configuration
public class DataSourceConfig {
@Bean @Profile("dev")
public DataSource h2DataSource() { return new EmbeddedDatabaseBuilder().build(); }
@Bean @Profile("prod")
public DataSource postgresDataSource() { return DataSourceBuilder.create().url(prodUrl).build(); }
}プロファイルグループ(Spring Boot 2.4以降)
複数のプロファイルを1つの名前にまとめます。そのグループを有効にすると、一覧に含まれるすべてのプロファイルが同時に有効になります。
# application.properties:
spring.profiles.group.production=prod,metrics,cloud環境変数による外部化された構成
Spring Bootは環境変数をプロパティに自動的にマッピングします。DB_HOSTはdb.hostにマッピングされます(緩和されたバインディング)。DockerやKubernetesへのデプロイに最適です。
# application.properties:
spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}プロパティの上書き優先順位
プロパティは、コマンドライン引数 > 環境変数 > プロファイル固有のファイル > application.properties > デフォルト値の優先順位で適用されます。優先順位の高いソースが、低いソースを上書きします。
Jasyptによる機密プロパティの暗号化
パスワードなどの機密値は、Jasypt Spring Bootで暗号化できます。暗号化した値をプロパティに保存し、JVM引数で渡したマスターキーを使用して、Jasyptが起動時に復号します。
# application.properties:
spring.datasource.password=ENC(k9r/2dfhXPQz+2jR8yzUYw==)
# JVM arg:
java -Djasypt.encryptor.password=masterSecret -jar app.jar複数ドキュメントのYAMLファイル
YAMLファイルでは、---で区切って複数のドキュメントを記述できます。各ドキュメント内でspring.config.activate.on-profileを使用すると、プロファイル固有の設定をインラインで記述できます。
server:
port: 8080
---
spring:
config:
activate:
on-profile: prod
server:
port: 443クイックチェック
関連するプロパティのグループを、型安全にJavaクラスへバインドするアノテーションはどれですか?
まとめ
設定にはapplication.properties / application.ymlを使用します。単一の値には@Value、グループには@ConfigurationPropertiesを使用します。プロファイルで環境を分離できます。環境変数はプロパティを上書きするため、コンテナでは不可欠です。
よくある質問
「アプリケーションプロパティとプロファイル」レッスンは無料ですか?
はい。「アプリケーションプロパティとプロファイル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全4レッスンが含まれています。
「アプリケーションプロパティとプロファイル」で何を学びますか?
application.properties/ymlで設定を外部化し、プロファイルを定義して、@Valueと@ConfigurationPropertiesで値を注入します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「アプリケーションプロパティとプロファイル」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 自動構成とSpring Bootスターター
- アプリケーションプロパティとプロファイル
- Beanの配線:@Component、@Service、@Repository
- コンストラクターインジェクションと循環依存