プロファイル

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

  • 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 {

	// ...

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

spring.profiles.active Environment (Javadoc) プロパティを使用して、アクティブなプロファイルを指定できます。この章で前述したいずれかの方法でプロパティを指定できます。たとえば、次の例に示すように、application.properties に含めることができます。

  • プロパティ

  • YAML

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

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

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

  • プロパティ

  • 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 (Javadoc) が優先されます。つまり、application.properties でアクティブなプロファイルを指定してから、コマンドラインスイッチを使用してそれらを置き換えることができます。

場合によっては、アクティブプロファイルを置き換えるのではなく、アクティブプロファイルに追加するプロパティがあると便利なことがあります。spring.profiles.include プロパティを使用すると、spring.profiles.active プロパティによってアクティブ化されたプロファイルの上にアクティブプロファイルを追加できます。SpringApplication (Javadoc) エントリポイントには、追加のプロファイルを設定するための Java API もあります。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 (Javadoc) インターフェースを使用してプロファイルをアクティブ化することもできます。

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

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