Spring構成でJavaプロパティを使用するためにPropertyPlaceholderConfigurerを使用しています( details here )
例えば:
<foo name="port">
<value>${my.server.port}</value>
</foo>
追加のプロパティを追加したいのですが、既存のインスタンスがすべてデフォルト値を使用できる分散システムがあります。オーバーライドするプロパティ値が定義されていない場合に、Spring configでデフォルト値を指定することで、すべてのプロパティファイルの更新を回避する方法はありますか?
ここに記載されているPropertyOverrideConfigurerをお探しですか
別のBeanファクトリポストプロセッサであるPropertyOverrideConfigurerはPropertyPlaceholderConfigurerに似ていますが、後者とは対照的に、元の定義にはBeanプロパティのデフォルト値を設定することも、値をまったく設定しないこともできます。オーバーライドするプロパティファイルに特定のBeanプロパティのエントリがない場合、デフォルトのコンテキスト定義が使用されます。
Spring 3は${my.server.port:defaultValue}
構文をサポートしています。
これをさらに改善する、あまり知られていない機能があります。ハードコーディングされた値の代わりに、構成可能なデフォルト値を使用できます。以下に例を示します。
config.properties:
timeout.default=30
timeout.myBean=60
context.xml:
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>config.properties</value>
</property>
</bean>
<bean id="myBean" class="Test">
<property name="timeout" value="${timeout.myBean:${timeout.default}}" />
</bean>
後で簡単にオーバーライドできるようにしながらデフォルトを使用するには、config.propertiesでこれを行います。
timeout.myBean = ${timeout.default}
<foo name="port">
<value>${my.server.port:8088}</value>
</foo>
デフォルトポートとして8088を使用するために動作するはずです
参照: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/
http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html Beanで定義された「ローカルプロパティ」は、ファイルから読み取られた値によってオーバーライドされるデフォルトと見なされることを指摘する:
<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"><value>my_config.properties</value></property>
<property name="properties">
<props>
<prop key="entry.1">123</prop>
</props>
</property>
</bean>
デフォルト値の後には、プロパティキーの後に:
を続けることができます。
<property name="port" value="${my.server.port:8080}" />
またはJavaコードで:
@Value("${my.server.port:8080}")
private String myServerPort;
見る:
valueSeparator
(from AbstractPropertyResolver
)
および VALUE_SEPARATOR
(SystemPropertyUtils
から)
ところで、 エルビス演算子 は、Spring Expression Language(SpEL)内でのみ使用可能です。
e.g .: https://stackoverflow.com/a/37706167/537554