IntelliJから実行しているときにSpring Bootプロファイルをアクティブ化するにはどうすればよいですか?


133

私には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オプションの実行構成に追加します。

どちらも機能しません。起動時にINFOメッセージが表示され続ける:アクティブなプロファイルが設定されていません。デフォルトのプロファイルにフォールバックします:default

を使用してWindowsのコマンドラインからアプリを実行した場合

gradle bootRun

しかし、私は最初に環境変数を設定しました

set SPRING_PROFILES_ACTIVE=local

その後、すべてが機能します。

だから私の質問は、IntelliJからbootRunを実行するときに、ローカルのスプリングブートプロファイルをアクティブ化するにはどうすればよいですか?


1
なぜそこにgradle経由でアプリケーションを実行しているのですか?実行構成を使用すると10倍便利になりますか?プロファイルを有効にできるフィールドがあります...
ステファンニコル

上記で説明したように、IntelliJで実行構成を使用しています。動いていない。
dleerob 2016

2
いいえ、違います。私が話しているのは、「Spring Boot実行構成」のRun-> Edit configuration> New> Spring Bootです。
ステファンニコル2016

A.はい、build.gradleでproject.propertiesをapplication.propertiesに展開する必要があるため、Spring Boot実行構成から移動しました。SpringBoot実行構成を使用すると、機能しないようです。私はその問題を解決するために調査し、おそらく私はあなたが提案したように単にアクティブなプロファイルフィールドを使用することができます
dleerob

1
Spring Boot構成を使用することは、その価値よりも問題が多いようです。「作成」はリソース全体をコピーするだけで、ビルドスクリプトによるリソースのフィルタリングや変更は行いません。次に、「make」ではなく「gradle」から「build」を実行するように指示すると、実行がフリーズします。代わりにbootRunを使用し、以下の回答にある環境エントリを使用すると、すべて正常に動作します。
dleerob 2016

回答:


194

-Dspring.profiles.active=testVMオプションに追加してから、その構成を再実行しました。それは完全に機能しました。

これは、

  • 選ぶ Run | Edit Configurations...
  • Configurationタブに移動します
  • 展開Environment明らかにするセクションをVM options

私は同じ状況で行き詰まりましたが、Mavenプロジェクトのためでした。助けてくれてありがとう。すべてのテストファイルにVMオプションを設定しました。
Sri9911、2018年

2
私にとってもうまくいきません。
Gradle

1
ここでもgradleを使用しています。
IARI

こんにちは、私は同じ問題を抱えていますが、この修正は問題を修正しません。ここで構成を再実行するとはどういう意味ですか?タスクを再実行するのと同じですか?
user1456110

図のように編集してから、特定のテストを実行しました。
トム

82

スプリングブート実行構成を実際に使用する場合(現在はUltimate Editionでのみサポートされています)、[アクティブプロファイル]設定でプロファイルを事前構成するのは簡単です。

ここに画像の説明を入力してください


1
おかげで、これはうまくいくと確信していますが、Spring Boot実行構成を使用していません。「Active Profiles」フィールドのないGradle実行構成を使用しています。私のGradleビルドは、ビルドディレクトリにコピーするプロパティファイルの一部をフィルタリングおよび変更するため、このためにGrade実行構成を使用しています。
dleerob 2016

上記の回答が指摘したように:これがうまくいかない場合argsは、Application.main()eg で渡しているか確認してくださいSpringApplication.run( Application.class, args );
Xaero Degreaz

この機能は、Ultimateエディションでのみサポートされています。
Julien Malige 2017

これを指摘してくれた@JulienMaligeに感謝します。回答を編集します。
Daniel Bubenheim 2017

11

このコマンドをbuild.gradleに追加してみてください

ここに画像の説明を入力してください

したがって、実行するには、その形状を構成します。

ここに画像の説明を入力してください


9

Spring Bootは、VMオプションの進化に伴い、VMオプションの読み取り方法を変更したようです。Intellijでアプリケーションを起動して、いくつかのプロファイルをアクティブにしたい場合は、次の方法を試してください。

1. VMオプションを変更する

[実行]で[構成の編集]を開き、[VMオプション]で以下を追加します。 -Dspring.profiles.active=local

それは実際に持つ鉱山の一つのプロジェクトと連携Spring Boot v2.0.3.RELEASEしてSpring v5.0.7.RELEASE、ではないと、別のプロジェクトにSpring Boot v2.1.1.RELEASESpring v5.1.3.RELEASE

また、MavenまたはJARで実行しているとき、人々はこれを述べました:

mvn spring-boot:run -Drun.profiles=dev

または

java -jar -Dspring.profiles.active=dev XXX.jar

(ここを参照:Spring Bootプロファイルの使用方法

2. JVM引数を渡す

どこかで言及されているように、JVMオプションを指定すると、Springはアプリケーションのプロセスを起動する方法を変更します。別のプロセスをforkし、受け取った引数を渡さないため、これは機能しません。argsを渡す唯一の方法は、次のとおりです。

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

繰り返しますが、これはMaven用です。 https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3.(アプリケーション)環境変数の設定

上記のいくつかの回答で述べたように、2番目のプロジェクトで私に有効なのは、環境変数を設定することでした。「構成の編集」-「環境変数」、および

SPRING_PROFILES_ACTIVE=local

1
env varは実際にはSPRING_PROFILES_ACTIVEです。
Josh M.

「spring.profiles.active」のようなIDEAの「VMオプション」の「実行構成」に追加すると、機能します。おそらく、ursのような別の形式がシステムプロパティでシステム全体で使用されていますか?
WesternGun

追加する場合、~/.profileまたは同様の場合は、使用する必要がありますSPRING_PROFILES_ACTIVE- spring.profiles.activeコマンドラインでの引数としてのみ機能する可能性があります。
ジョシュM.

1
ああ..だから、あなたが私が疑ったのと同じ意味です。アプリケーション環境だけでなく、実際のシステム環境。OK編集を行います。
WesternGun

8

私はbuild.gradleに以下を追加することになりました:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

したがって、IntelliJからbootRunを実行すると、デフォルトで「ローカル」プロファイルになります。

他の環境では、Tomcatで「SPRING_PROFILES_ACTIVE」環境変数を設定するだけです。

私はここにあるコメントからこれを得ました:https//github.com/spring-projects/spring-boot/pull/592


6

考えられる原因は、アプリケーションのメインメソッドにコマンドラインパラメーターを渡していないことです。私は数週間前に同じ間違いをしました。

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}

返信と提案に感謝しますが、私は引数を渡します
。– dleerob

これで実際に問題が解決しました。何らかの理由でGradleを使用してプロジェクトを作成したとき、Applicationクラスは自動生成されなかったため、メモリから手動で生成しました。args手順を忘れたため、実行構成の[アクティブプロファイル]ボックスが機能しませんでし-Dspring.profiles.activeた。VMオプションボックスに手動で渡す必要がありました。
Xaero Degreaz 2016


3

以下のための春ブーツ2.1.0以降を使用でき

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar


2
コマンドラインは次のようになりますspring-boot:run -Dspring-boot.run.profiles=local
Mr. K.

spring-boot:runでこれが答えです
カカバリ

2

私の場合、以下の構成をのVMオプションで使用しましIntelliJたが、ローカル構成を選択していませんでしたが、再起動するIntelliJと構成の詳細が選択されIntelliJ、サービスが実行を開始しました。

-Dspring.profiles.active=local

0

これを試して。次のようにbuild.gradleファイルを編集します。

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }


-3

-Dspring.profiles.active=localプログラムの引数の下に設定します。


上記の質問から引用を削除しました。私は実際には引用符を使用していません。実行構成フィールドに入力した内容を正確に表示しようとしていただけです
dleerob

5
あなたはVMオプションを意味します!
Michail Michailidis 2017

プログラムの引数がアプリケーションによって認識されないため、この答えは非常に誤解を招きます。
yuranos

他の人が述べたように、この答えは機能しません。プログラムの引数ではなく、IntelliJ IdeaのVMオプションの下にあるはずです
abstractKarshit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.