web-dev-qa-db-ja.com

スプリングブートのコマンドラインからアクティブプロファイルと設定場所を設定する

Spring Bootのアプリケーションがあります。

私は私のアプリケーション - >開発、ステージングそしてプロダクションに3つのプロファイルを持っています。だから私は3ファイルがあります

  1. application-development.yml
  2. application-staging.yml
  3. application-production.yml

私のapplication.ymlsrc/main/resourcesの中にあります。私はapplication.ymlでアクティブプロファイルを次のように設定しました。

spring:
  profiles.active: development

他の3つのプロファイル固有の設定ファイルはC:\configフォルダーにあります。

私はEclipse用のgradleプラグインを使用しています。 "bootRun"を実行しようとすると、Eclipseのgradle設定でコマンドライン引数を次のように設定します。

 -Dspring.profiles.active=staging -Dspring.config.location=C:\Config

しかしながら、コマンドラインプロパティは反映されておらず、私のアクティブプロファイルは常にdevelopmentとして設定されています(これは私がapplications.ymlファイルで述べたものです)。 C:\ Configフォルダもプロファイル固有の設定ファイルを検索しません。

私はここで何かが足りないと思います。私は過去2日間それを把握しようとしています。しかし、運はありません。どうぞよろしくお願いします。

110
O-OF-N

私はこれを追加しなければなりませんでした:

bootRun {
    String activeProfile =  System.properties['spring.profiles.active']
    String confLoc = System.properties['spring.config.location']
    systemProperty "spring.profiles.active", activeProfile
    systemProperty "spring.config.location", "file:$confLoc"
}

そして今bootRunはプロファイルと設定の場所を選びます。

ポインタをどうもありがとう。

15
O-OF-N

コマンドラインでスプリングプロパティを追加/上書きする方法は2つあります。

オプション1:Javaシステムプロパティ(VM引数)

-Dパラメータはapplication.jarより前にあることが重要です。そうしないと、認識されません。

Java -jar -Dspring.profiles.active=prod application.jar


オプション2:プログラム引数

Java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config
224
RenRen
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

正しくありません。

する必要があります:

--spring.profiles.active=staging --spring.config.location=C:\Config
9
Michael Yin

次のコマンドラインを使用できます。

Java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
8
Rollen Holt

OS変数、SPRING_PROFILES_ACTIVEを設定する方法もあります。

例えば:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

参考: アクティブなSpringプロファイルの設定方法

6
Rothin Sen

Mavenプラグインでプロファイルを設定するときはrun.jvmArguments経由でそれをしなければなりません

mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"

デバッグオプション付き

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"

私はこの旅行をたくさんの人に見かけました。

6
JARC

あなたの問題はおそらく "/"で終わっていないあなたのspring.config.locationに関連していると思います。

ドキュメントを引用する

Spring.config.locationに(ファイルではなく)ディレクトリが含まれる場合、それらは/で終わる必要があります(そしてロードされる前にspring.config.nameから生成された名前が追加されます)。

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files

3
jst

Michael Yinの答えは正しいですが、もっと良い説明が必要と思われます!

多くの人が、-DがJVMパラメータを指定する正しい方法であると言っていましたが、その通りです。しかし、Michaelは Spring Boot Profiles のドキュメントで述べられているように正しいです。

--spring.profiles.activeは標準のJVMパラメータではないので、IDEで使用する場合は正しいフィールド(プログラム引数)を入力してください。

2
Eric Taix

私のベストプラクティスはこれをVM "-D"引数として定義することです。スプリングブーツ1.xと2.xの違いに注意してください。

有効にするプロファイルは、コマンドラインで指定できます。

春2.x

-Dspring-boot.run.profiles=local

春1.x

-Dspring.profiles.active=local

Mavenでの使用例:

春2.x

mvn spring-boot:run -Dspring-boot.run.profiles=local

春1.x

mvn spring-boot:run -Dspring.profiles.active=local

複数のプロファイルの場合は、必ずカンマで区切ってください。

mvn spring-boot:run -Dspring.profiles.active=local,foo,bar
mvn spring-boot:run -Dspring-boot.run.profiles=local,foo,bar
1
Sma Ma