プロファイル
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.active
Environment
プロパティを使用して、アクティブなプロファイルを指定できます。この章で前述した任意の方法でプロパティを指定できます。例: 次の例に示すように、application.properties
に含めることができます。
プロパティ
YAML
spring.profiles.active=dev,hsqldb
spring:
profiles:
active: "dev,hsqldb"
次のスイッチ --spring.profiles.active=dev,hsqldb
を使用して、コマンドラインで指定することもできます。
アクティブなプロファイルがない場合は、デフォルトのプロファイルが有効になります。デフォルトのプロファイルの名前は default
であり、次の例に示すように、spring.profiles.default
Environment
プロパティを使用して調整できます。
プロパティ
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
を使用してアプリケーションを開始し、production
、proddb
、prodmq
プロファイルを 1 回のヒットでアクティブ化できるようになりました。
spring.profiles.active および spring.profiles.include と同様に、spring.profiles.group はプロファイル固有でないドキュメントでのみ使用できます。つまり、spring.config.activate.on-profile によってアクティブ化されたプロファイル固有のファイルやドキュメントに含めることはできません。 |
プログラムでプロファイルを設定する
アプリケーションを実行する前に SpringApplication.setAdditionalProfiles(…)
を呼び出すことにより、アクティブなプロファイルをプログラムで設定できます。Spring の ConfigurableEnvironment
インターフェースを使用してプロファイルをアクティブにすることもできます。
プロファイル固有の構成ファイル
application.properties
(または application.yaml
) のプロファイル固有のバリアントと、@ConfigurationProperties
を介して参照されるファイルは、ファイルとして扱われ、ロードされます。詳細については、プロファイル固有のファイルを参照してください。