web-dev-qa-db-ja.com

Spring Bootのapplication.propertiesでMavenプロパティを使用する

Pom.xmlからapplication.propertiesにプロパティをロードしようとしています。異なるデータベースURLを使用するために、devとprodの2つのプロファイルを作成します。私はJenkinsをCIとして使用しています。すべてのアプリ(主にブートプロジェクトなしのSpring MVC)は、mavenプロファイルを使用してTomcatにデプロイしています。 Mavenプロパティを使用してこれを行う可能性はありますか?私はそのようなことを試みました:spring.datasource.url=${jdbc.url}

25
Jakub Pomykała

実行する前に、展開可能なパッケージからプロパティファイルを外部化することを検討してください。これにより、すべての環境に同じコンパイルをデプロイできます。 Jenkinsに実際に不要な作業を保存します。ベストプラクティスは、アプリケーションを1回だけビルドすることですが、確信がない場合は、ここでその方法を説明します。

  1. pom.xmlで、プロパティに適切な値を持つプロファイルを定義します。

    <profile>
        <id>dev</id>
       <properties>
           <jdbc.url>your_dev_URL</jdbc.url>
       </properties>
    </profile>
    
  2. Maven Resources Plugin をセットアップして、application.propertiesファイルを含むディレクトリをフィルタリングします。

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        ...
    </build>
    
  3. Spring Boot 1.3以上を使用する場合、Spring BootプレースホルダーとMaven Resources Pluginでフィルタリングされたトークンとの競合を避けるため、導入されたフレームワーク 異なる構文を使用する必要があるソリューション =フィルタリングされた値。

    今、代わりに${property.key}を使用する必要があります@property.key@。この場合、application.propertiesには、期待どおりに機能するために次のサンプルが含まれている必要があります。

    [email protected]@
    

異なるMavenプロファイルのSpringプロパティファイルの分離 に関する投稿をチェックアウトすることもできます。そうすれば、pom.xmlから値を外部化できます。

60

もちろんあります。 application.propertiesファイルに対して Maven Filtering を使用するだけで、Mavenはファイルにプロファイル固有の値を書き込みます。

ただし、Mavenプロファイルはアプリケーションパッケージ/ビルド時に機能しますが、Spring Bootプロファイルは実行時に機能することを理解する必要があります。言い換えれば、Mavenプロファイルを使用すると、プロファイル固有の不変ビルドを取得できますが、Spring Bootのビルドを使用する場合は、起動前に毎回アプリケーション構成を変更したり、 ランニング

以下も参照してください:

1
Xtreme Biker