プロファイル

Spring プロファイルは、アプリケーション構成の一部を分離し、特定の環境でのみ使用可能にする方法を提供します。次の例に示すように、@Component@Configuration@ConfigurationProperties を @Profile でマークして、ロード時を制限できます。

  • Java

  • Kotlin

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration(proxyBeanMethods = false)
@Profile("production")
public class ProductionConfiguration {

	// ...

}
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile

@Configuration(proxyBeanMethods = false)
@Profile("production")
class ProductionConfiguration {

	// ...

}
自動スキャンではなく @EnableConfigurationProperties を介して @ConfigurationProperties Bean を登録する場合は、@EnableConfigurationProperties アノテーションを持つ @Configuration クラスに @Profile アノテーションを指定する必要があります。@ConfigurationProperties をスキャンする場合は、@ConfigurationProperties クラス自体に @Profile を指定できます。

spring.profiles.activeEnvironment プロパティを使用して、アクティブなプロファイルを指定できます。この章で前述した任意の方法でプロパティを指定できます。例: 次の例に示すように、application.properties に含めることができます。

  • プロパティ

  • YAML

spring.profiles.active=dev,hsqldb
spring:
  profiles:
    active: "dev,hsqldb"

次のスイッチ --spring.profiles.active=dev,hsqldb を使用して、コマンドラインで指定することもできます。

アクティブなプロファイルがない場合は、デフォルトのプロファイルが有効になります。デフォルトのプロファイルの名前は default であり、次の例に示すように、spring.profiles.defaultEnvironment プロパティを使用して調整できます。

  • プロパティ

  • YAML

spring.profiles.default=none
spring:
  profiles:
    default: "none"

spring.profiles.active と spring.profiles.default は、プロファイル固有ではないドキュメントでのみ使用できます。つまり、プロファイル固有のファイルや spring.config.activate.on-profile によってアクティブ化されるドキュメントに含めることはできません。

例: 2 番目のドキュメント構成が無効です:

  • プロパティ

  • YAML

spring.profiles.active=prod
#---
spring.config.activate.on-profile=prod
spring.profiles.active=metrics
# this document is valid
spring:
  profiles:
    active: "prod"
---
# this document is invalid
spring:
  config:
    activate:
      on-profile: "prod"
  profiles:
    active: "metrics"

アクティブプロファイルの追加

spring.profiles.active プロパティは、他のプロパティと同じ順序付けルールに従います: 最高の PropertySource が勝ちます。つまり、application.properties でアクティブなプロファイルを指定し、コマンドラインスイッチを使用して置き換えることができます。

アクティブなプロファイルを置き換えるのではなく、追加するプロパティがあると便利な場合があります。spring.profiles.include プロパティを使用して、spring.profiles.active プロパティによってアクティブ化されたプロファイルに加えてアクティブなプロファイルを追加できます。SpringApplication エントリポイントには、追加のプロファイルを設定するための JavaAPI もあります。SpringApplication (Javadoc) の setAdditionalProfiles() メソッドを参照してください。

例: 次のプロパティを持つアプリケーションが実行されると、--spring.profiles.active スイッチを使用して実行されている場合でも、共通プロファイルとローカルプロファイルがアクティブになります。

  • プロパティ

  • YAML

spring.profiles.include[0]=common
spring.profiles.include[1]=local
spring:
  profiles:
    include:
      - "common"
      - "local"
spring.profiles.active と同様に、spring.profiles.include はプロファイル固有ではないドキュメントでのみ使用できます。つまり、プロファイル固有のファイルや spring.config.activate.on-profile によってアクティブ化されたドキュメントに含めることはできません。

次のセクションで説明するプロファイルグループは、特定のプロファイルがアクティブな場合にアクティブなプロファイルを追加するためにも使用できます。

プロファイルグループ

場合によっては、アプリケーションで定義して使用するプロファイルがきめ細かくなりすぎて、使用するのが面倒になることがあります。例: データベースとメッセージング機能を個別に有効にするために使用する proddb プロファイルと prodmq プロファイルがある場合があります。

これを支援するために、Spring Boot ではプロファイルグループを定義できます。プロファイルグループを使用すると、関連するプロファイルグループの論理名を定義できます。

例: proddb プロファイルと prodmq プロファイルで構成される production グループを作成できます。

  • プロパティ

  • YAML

spring.profiles.group.production[0]=proddb
spring.profiles.group.production[1]=prodmq
spring:
  profiles:
    group:
      production:
      - "proddb"
      - "prodmq"

--spring.profiles.active=production を使用してアプリケーションを開始し、productionproddbprodmq プロファイルを 1 回のヒットでアクティブ化できるようになりました。

spring.profiles.active および spring.profiles.include と同様に、spring.profiles.group はプロファイル固有でないドキュメントでのみ使用できます。つまり、spring.config.activate.on-profile によってアクティブ化されたプロファイル固有のファイルドキュメントに含めることはできません。

プログラムでプロファイルを設定する

アプリケーションを実行する前に SpringApplication.setAdditionalProfiles(…​) を呼び出すことにより、アクティブなプロファイルをプログラムで設定できます。Spring の ConfigurableEnvironment インターフェースを使用してプロファイルをアクティブにすることもできます。

プロファイル固有の構成ファイル

application.properties (または application.yaml) のプロファイル固有のバリアントと、@ConfigurationProperties を介して参照されるファイルは、ファイルとして扱われ、ロードされます。詳細については、プロファイル固有のファイルを参照してください。