jar外のSpringプロパティファイル

1. 概要

プロパティファイルは、プロジェクト固有の情報を保存するために使用できる一般的な方法です。 理想的には、必要に応じて構成を変更できるように、パッケージの外部に保管する必要があります。
このクイックチュートリアルでは、https://www.baeldung.com/properties-with-spring [Spring Boot application]のjarの外部の場所からプロパティファイルをロードするさまざまな方法を調べます。*

2. デフォルトの場所を使用する

慣例により、Spring Bootは外部化された構成ファイルを探します。
  • 現在のディレクトリの_ / config_サブディレクトリ

  • 現在のディレクトリ

  • クラスパス_ / config_パッケージ

  • クラスパスのルート

    したがって、* _ application.properties_で定義され、現在のディレクトリの_ / config_サブディレクトリに配置されているプロパティがロードされます*。 これは、衝突の場合に他の場所のプロパティもオーバーライドします。

3. コマンドラインを使用する

上記の規則が機能しない場合は、コマンドラインで直接場所を設定することもできます:*
java -jar app.jar --spring.config.location=file:///Users/home/config/jdbc.properties
アプリケーションがファイルを検索するフォルダーの場所を渡すこともできます。
java -jar app.jar --spring.config.name=application,jdbc --spring.config.location=file:///Users/home/config
また、別のアプローチは、https://www.baeldung.com/spring-boot-command-line-arguments [Maven plugin]を介してSpring Bootアプリケーションを実行することです。 そこで、_-D_パラメーターを使用できます。
mvn spring-boot:run -Dspring.config.location="file:///Users/home/jdbc.properties"

4. 環境変数を使用する

または、起動コマンドを変更できないとしましょう。 すばらしいのは、* Spring Bootは環境変数_SPRING_CONFIG_NAME_および_SPRING_CONFIG_LOCATION_ *も読み取ることです。
export SPRING_CONFIG_NAME=application,jdbc
export SPRING_CONFIG_LOCATION=file:///Users/home/config
java -jar app.jar
デフォルトのファイルは引き続きロードされることに注意してください。 ただし、プロパティが衝突した場合は、*環境固有のプロパティファイルが優先されます。*

5. プログラム的に

または、プログラムによるアクセスが必要な場合は、_PropertySourcesPlaceholderConfigurer_ Beanを登録できます。
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer();
    properties.setLocation(new FileSystemResource("/Users/home/conf.properties"));
    properties.setIgnoreResourceNotFound(false);
    return properties;
}
ここでは、_PropertySourcesPlaceholderConfigurer_を使用して、カスタムの場所からプロパティを読み込みました。

*6. Fat Jar *からファイルを除外する

Mavenブートプラグインは、_src / main / resources_ディレクトリ内のすべてのファイルをjarパッケージに自動的に含めます。
ファイルをjarの一部にしたくない場合は、単純な構成で除外できます。
<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/conf.properties</exclude>
            </excludes>
        </resource>
    </resources>
</build>
この例では、_conf.properties_ファイルをフィルター処理して、結果のjarに含まれないようにしました。

7. 結論

ご覧のとおり、Spring Bootフレームワーク自体がlink:/configuration-properties-in-spring-boot[externalized configuration]を処理してくれます。
多くの場合、適切なファイルと場所にプロパティ値を配置するだけですが、SpringのJava APIを使用して制御を強化することもできます。
いつものように、サンプルの完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-boot-ops[GitHubで]から入手できます。