私は5つの環境があります。
- local (my development machine)
- dev
- qc
- uat
- live
- staging
環境ごとに異なるアプリケーションプロパティを使用する必要があるので、データソースのURLがそれぞれ異なる次のプロパティファイルを用意します。
- application.properties (containing common properties)
- application-local.properties
- application-dev.properties
- application-qc.properties
- application-uat.properties
- application-live.properties
私はIntelliJを使っていて、自分のローカルマシンのGradleプラグインの中のbootRunを使ってアプリを実行しています。 Tomcatを実行する他のすべての環境で同じアプリケーションwarファイルをデプロイすることを使用します。
私は追加してみました:
--spring.profiles.active = local
スクリプトパラメータの下で実行設定に。
追加してみた
-Dspring.profiles.active = local
VM optionsの下の実行構成に。
どちらも動きません。起動時にINFOメッセージが表示され続けます。アクティブなプロファイルが設定されていないため、デフォルトのプロファイルに戻ります。default
Windowsのコマンドラインからアプリを実行した場合
gradle bootRun
最初に環境変数を設定しました
set SPRING_PROFILES_ACTIVE=local
それからすべてがうまくいきます。
だから私の質問は、IntelliJからbootRunを実行するときどのように私は私のローカルスプリングブートプロファイルをアクティブにするのですか?
設定の編集に入りました...
VM Optionsに-Dspring.profiles.active=test
を追加してから、その設定を再実行しました。それは完璧に機能しました。
私はbuild.gradleに以下を追加しました。
bootRun {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}
test {
environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}
そのため、IntelliJからbootRunを実行すると、デフォルトで "local"プロファイルが使用されます。
その他の環境では、Tomcatで単に 'SPRING_PROFILES_ACTIVE'環境変数を設定します。
私はここで見つけたコメントからこれを得ました: https://github.com/spring-projects/spring-boot/pull/592
考えられる原因は、コマンドラインパラメータをアプリケーションのmainメソッドに渡さないことです。私は数週間前に同じ間違いをしました。
public static final void main(String... args) {
SpringApplication.run(Application.class, args);
}
私はIntellij Community Editionを使います。 [実行/デバッグ構成]> [ランナー]タブ> [環境変数]> [...]ボタンをクリックします。追加:SPRING_PROFILES_ACTIVE = local
Spring Bootは、進化するにつれてVMオプションの読み方を変えたようです。これは、Intellijでアプリケーションを起動して何らかのプロファイルをアクティブにしたいときに試す方法です。
[ファイル名を指定して実行]で[設定の編集]を開き、[VMオプション]に次の行を追加します。-Dspring.profiles.active=local
それは実際にはSpring Boot v2.0.3.RELEASE
とSpring v5.0.7.RELEASE
を持つ私の1つのプロジェクトで動作しますが、Spring Boot v2.1.1.RELEASE
とSpring v5.1.3.RELEASE
を持つ別のプロジェクトでは動作しません。
また、MavenまたはJARを使って実行しているとき、人々はこれを述べました:
mvn spring-boot:run -Drun.profiles=dev
または
Java -jar -Dspring.profiles.active=dev XXX.jar
(こちらを参照してください。 Spring Bootプロファイルの使い方 )
JVMのオプションを指定すると、Springはアプリケーションのプロセスを起動する方法を変更すると、どこかで言及されています。これは別のプロセスをフォークし、受け取った引数を渡さないため、これは機能しません。引数を渡す唯一の方法は、次のとおりです。
mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."
繰り返しますが、これはMaven用です。 https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html
2番目のプロジェクトで私にはたらくのは、上記の答えで述べたように、環境変数を設定することでした: "設定の編集" - "環境変数"、そして:
spring.profiles.active=local
Spring Boot 2.1. 以降では使用できます
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
これを試して。次のようにbuild.gradleファイルを編集します。
ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }