web-dev-qa-db-ja.com

Spring XMLでデフォルトのプロパティ値を指定する方法はありますか?

Spring構成でJavaプロパティを使用するためにPropertyPlaceholderConfigurerを使用しています( details here

例えば:

<foo name="port">
  <value>${my.server.port}</value>
</foo>

追加のプロパティを追加したいのですが、既存のインスタンスがすべてデフォルト値を使用できる分散システムがあります。オーバーライドするプロパティ値が定義されていない場合に、Spring configでデフォルト値を指定することで、すべてのプロパティファイルの更新を回避する方法はありますか?

88
Rog

ここに記載されているPropertyOverrideConfigurerをお探しですか

http://static.springsource.org/spring/docs/2.5.x/reference/beans.html#beans-factory-overrideconfigurer

別のBeanファクトリポストプロセッサであるPropertyOverrideConfigurerはPropertyPlaceholderConfigurerに似ていますが、後者とは対照的に、元の定義にはBeanプロパティのデフォルト値を設定することも、値をまったく設定しないこともできます。オーバーライドするプロパティファイルに特定のBeanプロパティのエントリがない場合、デフォルトのコンテキスト定義が使用されます。

14
JoseK

Spring 3は${my.server.port:defaultValue}構文をサポートしています。

268
lexicore

これをさらに改善する、あまり知られていない機能があります。ハードコーディングされた値の代わりに、構成可能なデフォルト値を使用できます。以下に例を示します。

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}
27
<foo name="port">
   <value>${my.server.port:8088}</value>
</foo>

デフォルトポートとして8088を使用するために動作するはずです

参照: http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/

22
Uberto

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;

見る:

ところで、 エルビス演算子 は、Spring Expression Language(SpEL)内でのみ使用可能です。
e.g .: https://stackoverflow.com/a/37706167/537554

7
ryenus