私たちは Spring Boot Web アプリケーションに取り組んでおり、使用しているデータベースは MySQL です。
私たちの設定では、まずローカルでテストします(つまり、PC に MySQL をインストールする必要があります)。
次に Bitbucket にプッシュします。
Jenkins は Bitbucket への新しいプッシュを自動的に検出し、ビルドを実行します (Jenkins mvn build が成功するには、Jenkins を実行している仮想マシンに MySQL もインストールする必要があります)。
Jenkins のビルドが成功したら、OpenShift 上のアプリケーションにコードをプッシュします (Jenkins 上の Openshift デプロイメント プラグインを使用)。
私たちが抱えている問題は、すでにお気づきかもしれませんが、次のとおりです。
では、
application.properties
MySQL 情報をハードコードすることはできません。プロジェクトは 3 つの異なる場所 (ローカル、Jenkins、OpenShift ) で実行されるため、データソース フィールドを動的にする必要があります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
ますか。sqlURL
sqlPort
application.properties
application.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