1

私は複数のプロパティ ファイルを持っています。application.properties と呼ばれる一般的なものと、[HostName].properties と呼ばれるより具体的なものです。

Hostname.properties は、application.properties よりも高い優先順位に設定されています。

application.properties で、db.url を設定します。

db.url=jdbc:mysql://${db.host}:3306/${db.schema}?autoReconnect=true&sessionVariables=storage_engine=InnoDB;

また、このプロパティ ファイルで db.host と db.schema の値を設定します。

db.schema=default
db.host=localhost

次に、[Hostname].properties で、db.host と db.schema の値をオーバーライドします。

db.schema=specific
db.host=specific_hostname

ただし、このネスティングが機能していないようです。

db.schema 値は「特定」に解決されますが、db.url プロパティは、db.url が定義されているのと同じファイルで指定された db.schema に解決されます。

次のテスト スニペットを検討してください。

@Value("${db.url}")
private String dbUrl;

@Value("${db.schema}")
private String dbSchema;

@Test
public void testUrlTest() {
    System.out.println(dbUrl);
    System.out.println(dbSchema);
}

最初に出力される値は

jdbc:mysql://localhost:3306/default?autoReconnect=true&sessionVariables=storage_engine=InnoDB;

2 番目の値は次のとおりです。

明確な

これは設計によるものですか?あるプロパティ コンフィギュアラーから次のコンフィギュアラーへのネストをオーバーライドできるようにしたいと考えています。

これを回避する方法はありますか?

更新: プロパティ プレース ホルダーは、Spring config xml で次のように構成されます。

<context:property-placeholder order="10"
    location="classpath:xxx.yyy/application.properties"
    ignore-unresolvable="true" ignore-resource-not-found="false" />

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" ref="hostnameLookup" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="ignoreUnresolvablePlaceholders" value="true" />
    <property name="order" value="5" />
</bean>

<bean class="xxx.yyy.util.HostNameLookupFactory" id="hostnameLookup"
    autowire-candidate="false">
    <property name="prefix" value="classpath:xxx.yyy/" />
    <property name="suffix" value=".properties" />
</bean>

HostNameLookupFactory は、ローカル ホスト名を提供するファクトリ Bean です。

4

0 に答える 0