Spring Boot の application.properties で env 変数を使用する 質問する

Spring Boot の application.properties で env 変数を使用する 質問する

私たちは Spring Boot Web アプリケーションに取り組んでおり、使用しているデータベースは MySQL です。

  • 私たちの設定では、まずローカルでテストします(つまり、PC に MySQL をインストールする必要があります)。

  • 次に Bitbucket にプッシュします。

  • Jenkins は Bitbucket への新しいプッシュを自動的に検出し、ビルドを実行します (Jenkins mvn build が成功するには、Jenkins を実行している仮想マシンに MySQL もインストールする必要があります)。

  • Jenkins のビルドが成功したら、OpenShift 上のアプリケーションにコードをプッシュします (Jenkins 上の Openshift デプロイメント プラグインを使用)。

私たちが抱えている問題は、すでにお気づきかもしれませんが、次のとおりです。

  • では、application.propertiesMySQL 情報をハードコードすることはできません。プロジェクトは 3 つの異なる場所 (ローカルJenkinsOpenShift ) で実行されるため、データソース フィールドを動的にする必要がありますapplication.properties(さまざまな方法があることはわかっていますが、現在はこのソリューションに取り組んでいます)。

      spring.datasource.url = 
      spring.datasource.username = 
      spring.datasource.password = 
    

私たちが思いついた解決策は、ローカルと Jenkins VM にシステム環境変数を作成し (OpenShift と同じ名前を付ける)、それぞれに適切な値を割り当てることです。

export OPENSHIFT_MYSQL_DB_HOST="jdbc:mysql://localhost"
export OPENSHIFT_MYSQL_DB_PORT="3306"
export OPENSHIFT_MYSQL_DB_USERNAME="root"
export OPENSHIFT_MYSQL_DB_PASSWORD="123asd"

Map<String, String> env = System.getenv();これを実行して、動作しました。また、環境変数を次のように Java 変数にできることも確認しました。

String password = env.get("OPENSHIFT_MYSQL_DB_PASSWORD");   
String userName = env.get("OPENSHIFT_MYSQL_DB_USERNAME");   
String sqlURL = env.get("OPENSHIFT_MYSQL_DB_HOST"); 
String sqlPort = env.get("OPENSHIFT_MYSQL_DB_PORT");

今残っているのは、これらの Java 変数を で使用することだけですapplication.propertiesが、これが問題です。

password、、、および変数をに表示できるようにするには、どのフォルダで、どのように割り当てる必要がありますか。また、それらを にどのように含めuserNameますか。sqlURLsqlPortapplication.propertiesapplication.properties

私たちはいろいろなことを試してきましたが、そのうちの一つは次のとおりです。

spring.datasource.url = ${sqlURL}:${sqlPort}/"nameofDB"
spring.datasource.username = ${userName}
spring.datasource.password = ${password}

今のところ運がありません。おそらく、これらの環境変数を適切なクラス/フォルダーに配置していないか、 で誤って使用していますapplication.properties

ベストアンサー1

Java 変数を使用する必要はありません。システム環境変数を含めるには、ファイルに以下を追加しますapplication.properties

spring.datasource.url = ${OPENSHIFT_MYSQL_DB_HOST}:${OPENSHIFT_MYSQL_DB_PORT}/"nameofDB"
spring.datasource.username = ${OPENSHIFT_MYSQL_DB_USERNAME}
spring.datasource.password = ${OPENSHIFT_MYSQL_DB_PASSWORD}

しかし、 @Stefan Iseleが提案した方法の方が好ましいです。この場合は、 env 変数を 1 つだけ宣言すればよいからです。Springはテンプレートspring.profiles.activeによって適切なプロパティ ファイルを自動的に読み取ります。application-{profile-name}.properties

おすすめ記事