私は複数のプロパティ ファイルを持っています。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 です。