我确信这已被问过1000次了,因为我已经看过了,但是我错过了一些东西。
上下文:
<beans profile="localDev">
<util:properties id="propertiesLocalDev"location="classpath:/localDev.properties"/>
</beans>
<beans profile="test">
<util:properties id="properties-test" location="classpath:/test.properties"/>
</beans>
初始化:
System.setProperty("spring.profiles.active", "localDev");
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:applicationContext.xml");
ctx.refresh();
配置:
@Configuration
public class AppConfig {
@Value("${test.value}")
private String testValue;
...
日志:
INFO: Loading properties file from class path resource [localDev.properties]
属性:
test.value=ugh
所以看起来属性正在被读取,但是AppConfig.testValue中的值没有被设置。我已经尝试过纯java java / xml等...有些配置打破了一些工作,尝试使用@PropertySource,但常量是testValue永远不会被设置,所以我从根本上做错了。
总体目标是根据不同的配置文件加载不同的属性文件。
谁能看到我做错了什么? 感谢
答案 0 :(得分:0)
您还需要一个可以为您解析财产的PropertySourcesPlaceholderConfigurer。这是使用以下配置:
<context:property-placeholder location="..."
local-override="true" properties-ref="propertiesLocalDev" />
这样你的财产价值应该干净利落地解决。
这也应该有效 - 使用Spring-EL:
@Value("#{@propertiesLocalDev['test.value']}")
private String testValue;
答案 1 :(得分:0)
尝试
public class AppConfig {
@Autowired
private String testValue;
}
如果变量已正确自动装配,您可以使用
String sUgh = testValue.getProperty("test.value"); // = "ugh"
我也会使用普通的
<util:properties id="propertiesLocalDev"location="classpath:/localDev.properties"/>
而不是使用
<beans profile>
标签
答案 2 :(得分:0)
你必须使用类似的东西,在XML中只使用以下
<util:properties id="test" location="classpath:fn-test-configuration.properties" />
现在,您可以按照以下方式使用类
中的属性值 @Value(&#34;#{test.test.value}&#34;)
private String testValue;
我使用了同样的方法,但工作正常。