回答:
ここに記載されているPropertyOverrideConfigurerを探していますか
別のBeanファクトリポストプロセッサであるPropertyOverrideConfigurerはPropertyPlaceholderConfigurerに似ていますが、後者とは対照的に、元の定義にはBeanプロパティのデフォルト値を設定することも、まったく値を設定しないこともできます。オーバーライドするプロパティファイルに特定のBeanプロパティのエントリがない場合、デフォルトのコンテキスト定義が使用されます。
Spring 3は${my.server.port:defaultValue}
構文をサポートしています。
${my.server.port:-defaultValue}
同じ結果になるようです。:-
「:
」ではなく「」に注意してください。
<context:property-placeholder/>
これを機能させるには、追加する必要があります。または、PropertyPlaceholderConfigurer
あまり知られていない機能があり、これはさらに優れています。ハードコードされたデフォルト値の代わりに、構成可能なデフォルト値を使用できます。次に例を示します。
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}
${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/
デフォルト値の:
後には、プロパティキーの後にaを付けることができます。たとえば、
<property name="port" value="${my.server.port:8080}" />
またはJavaコードで:
@Value("${my.server.port:8080}")
private String myServerPort;
見る:
valueSeparator
(からAbstractPropertyResolver
)
およびVALUE_SEPARATOR
(からSystemPropertyUtils
)
ところで、Elvisオペレーターは、Spring Expression Language(SpEL)内でのみ使用できます。
例:https : //stackoverflow.com/a/37706167/537554
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>
また、私のために働く別の解決策を見つけます。従来の春のプロジェクトでは、ユーザーがこの独自の構成を使用できるように、この方法を使用しています。
<bean id="appUserProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound" value="false"/>
<property name="locations">
<list>
<value>file:./conf/user.properties</value>
</list>
</property>
</bean>
そして、このプロパティにアクセスするためのコードでは、次のように記述する必要があります。
@Value("#{appUserProperties.userProperty}")
private String userProperty
そして、新しいプロパティを追加する必要があるが、現在は本番ユーザー設定に追加したくないという状況が発生した場合、すべてのテストコンテキストにパッチを適用する必要があると、アプリケーションはすぐに失敗します。起動。
この問題を処理するには、次の構文を使用してデフォルト値を追加できます。
@Value("#{appUserProperties.get('userProperty')?:'default value'}")
private String userProperty
それは私にとって本当の発見でした。
18GerPD8fY4iTbNpC9hHNXNHyrDMampPLA
ますか?誰もが知っていると思いますし、私は愚かですが