Java Spring@Value未解析为属性文件中的值
我以前在其他项目中也做过这个,我只是在做同样的事情,但由于某种原因它不起作用。SpringJava Spring@Value未解析为属性文件中的值,java,spring,spring-properties,Java,Spring,Spring Properties,我以前在其他项目中也做过这个,我只是在做同样的事情,但由于某种原因它不起作用。Spring@Value不是从属性文件读取,而是从字面上读取值 AppConfig.java @Component public class AppConfig { @Value("${key.value1}") private String value; public String getValue() { return value; } } applica
@Value
不是从属性文件读取,而是从字面上读取值
AppConfig.java
@Component
public class AppConfig
{
@Value("${key.value1}")
private String value;
public String getValue()
{
return value;
}
}
applicationContext.xml:
<context:component-scan
base-package="com.test.config" />
<context:annotation-config />
<bean id="appConfigProperties"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:appconfig.properties" />
</bean>
在我的控制器中,我有:
@Autowired
private AppConfig appConfig;
应用程序启动得很好,但当我启动时
appConfig.getValue()
它回来了
${key.value1}
它不会解析为属性文件中的值
想法?读一读佩德贾拉登科维奇的评论
除了他提供的链接,这不起作用的原因是
@Value
处理需要属性资源占位符配置器而不是属性PlaceHolderConfigure
问题是由于我的applicationContext.xml与spring-servlet.xml之间的问题-这是bean之间的范围问题
pedjaradenkovic好心地向我指出了一个现有的资源:
而且我还发现@value
不起作用的原因是,@value
需要属性资源占位符配置器
,而不是属性PlaceHolder配置器
。我做了同样的修改,它对我来说很有效,我使用的是Spring4.0.3版本。
我在配置文件中使用以下代码配置了此项-
@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
在我的情况下,静态字段将不会被注入。我使用的是spring boot,对我来说,将版本从1.4.0.RELEASE
升级到1.5.6.RELEASE
解决了这个问题。对于spring boot用户,PropertyPlaceHolderConfigure和spring 3.1中添加的新PropertySourcePlaceHolderConfigure。所以访问属性文件很简单。注射
注意:确保您的属性不能是静态的
@Value("${key.value1}")
private String value;
在我的情况下,我错过了花括号。我有@Value(“foo.bar”)字符串值
而不是正确形式的@Value(${foo.bar}”)字符串值
请注意,如果在整个代码库中有多个应用程序.properties
文件,请尝试将值添加到父项目的属性文件中
您可以检查项目的pom.xml
文件,以确定当前项目的父项目是什么
或者,尝试使用environment.getProperty()
而不是@Value
在我的例子中,我使用了lombok@allargsconstuctor,它也获取了属性。删除此批注解决了问题。@Value有时可能需要一天或半天才能解决;)
以下是我所做的:
将属性添加到属性或YAML文件
确保使用@EnableAutoConfiguration或@springbootplication注释了主类
创建可在其中使用@Value的AppConfig
@值(“${PROPERTY}”)
私有字符串URL
在类级别用@Configuration注释此AppConfig
到目前为止,安装已经完成,现在可以通过自动连接AppConfig在任何地方使用它
示例:在某些服务中@Autowired private AppConfig AppConfig;
在该服务的方法中,调用appConfig.getUrl()从属性文件获取属性URL的值
注意:不要试图在服务的构造函数中获取值,它将为NULL。重复,谢谢!没有找到那个线程,我找到的大多数线程都与值为NullPropertyPlaceHolderConfigure的值有关,它对我来说很好。我只需要修复上下文:我的应用程序上下文xml和SpringServlet中的组件扫描xml@TS请问您使用的是哪个版本的spring?您不能改为@Autowire环境吗?请看,您可以从仅供参考的资料中获得有关此配置的更多信息:您不必再在Spring boot 1.5.9中添加此Bean。@realPK看起来像是这样,我在使用Spring 4.2.6,但仍然必须添加它。@FlorianWicher我刚才说的是Spring boot,我相信它使用的是Spring framework 4.3。参考-.@Florian Wicher-可能你可以尝试将spring boot版本升级到2.x,这样你就可以避免这种情况。只需删除static
关键字,它现在就可以正常工作了!也为我工作。这很奇怪,因为我在其他类中有带@Value的静态字段,它们工作得很好。
@Value("${key.value1}")
private String value;