0Pricing
Java Academy · レッスン

アプリケーションプロパティとプロファイル

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.jar

beanに@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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 自動構成とSpring Bootスターター
  2. アプリケーションプロパティとプロファイル
  3. Beanの配線:@Component、@Service、@Repository
  4. コンストラクターインジェクションと循環依存
← Java Academyに戻る