1. 概要

プロパティファイルは、プロジェクト固有の情報を保存するために使用できる一般的な方法です。 理想的には、必要に応じて構成を変更できるように、パッケージの外部に保持する必要があります。

このクイックチュートリアルでは、Spring Bootアプリケーションのjarファイルの外側の場所からプロパティファイルをロードするためのさまざまな方法を調べます。

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

慣例により、Spring Bootは、外部化された構成ファイル— application.properties またはapplication.yml— を、次の優先順位で4つの所定の場所で検索します。

  • 現在のディレクトリの/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

最後に、別のアプローチは、Mavenプラグインを介して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. アプリケーションプロパティの使用

ご覧のとおり、アプリケーションを起動する前に spring.config.nameおよびspring.config.location プロパティを定義する必要があるため、でそれらを使用します。 application.properties ファイル(または対応するYAML)は効果がありません。

Spring Bootバージョン2.4.0でプロパティの処理方法を変更しました。

この変更に伴い、チームは、アプリケーションのプロパティから直接追加の構成ファイルをインポートできる新しいプロパティを導入しました。

spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties

6. プログラムで

プログラムによるアクセスが必要な場合は、 PropertySourcesPlaceholderConfigurerbeanを登録できます。

public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
    PropertySourcesPlaceholderConfigurer properties = 
      new PropertySourcesPlaceholderConfigurer();
    properties.setLocation(new FileSystemResource("/Users/home/conf.properties"));
    properties.setIgnoreResourceNotFound(false);
    return properties;
}

ここでは、 PropertySourcesPlaceholderConfigurer を使用して、カスタムの場所からプロパティをロードしました。

7. FatJarからのファイルの除外

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に含まれないようにフィルターで除外しています。

8. 結論

この記事では、Spring Bootフレームワーク自体が外部構成をどのように処理するかを示しました。

多くの場合、プロパティ値を正しいファイルと場所に配置する必要があります。 ただし、SpringのJavaAPIを使用してさらに制御することもできます。

いつものように、例の完全なソースコードは、GitHubから入手できます。