Spring @Value没有设置

时间:2013-04-16 13:14:36

标签: spring properties

我确信这已被问过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永远不会被设置,所以我从根本上做错了。

总体目标是根据不同的配置文件加载不同的属性文件。

谁能看到我做错了什么? 感谢

3 个答案:

答案 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;

我使用了同样的方法,但工作正常。