目前我有一個加載屬性文件的Spring xml配置(Spring 4)。Spring佔位符不能解析JavaConfig中的屬性
context.properties
my.app.service = myService
my.app.other = ${my.app.service}/sample
Spring XML配置
<bean id="contextProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound" value="true" />
<property name="fileEncoding" value="UTF-8" />
<property name="locations">
<list>
<value>classpath:context.properties</value>
</list>
</property>
</bean>
<bean id="placeholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true" />
<property name="properties" ref="contextProperties" />
<property name="nullValue" value="@null" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>
Bean上使用屬性
@Component
public class MyComponent {
@Value("${my.app.other}")
private String others;
}
這工作完全和others
值MyService/sample
,爲例外。但是當我嘗試用JavaConfig替換此配置時,我的組件中的@Value
不能以相同的方式工作。該值不是myService/sample
而是${my.app.service}/sample
。
@Configuration
@PropertySource(name="contextProperties", ignoreResourceNotFound=true, value={"classpath:context.properties"})
public class PropertiesConfiguration {
@Bean
public static PropertyPlaceholderConfigurer placeholder() throws IOException {
PropertyPlaceholderConfigurer placeholder = new PropertyPlaceholderConfigurer();
placeholder.setNullValue("@null");
placeholder.setSystemPropertiesMode(PropertyPlaceholderConfigurer.SYSTEM_PROPERTIES_MODE_OVERRIDE);
return placeholder;
}
}
我是否錯過了從xml到Javaconfig的轉換?
ps:我也嘗試實例化一個PropertySourcesPlaceholderConfigurer
而不是PropertyPlaceholderConfigurer
沒有更多的成功。
即使它不能解決你的問題,我可以確認你應該使用'PropertySourcesPlaceholderConfigurer',而不是'PropertyPlaceholderConfigurer' – superbob 2015-03-19 09:49:13
'my.app.service'屬性解決好嗎?使用@Value(「$ {my.app.service}」)檢查,如果問題來自屬性嵌套,我會漫步。 – superbob 2015-03-19 09:53:00