Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring@Value未解析为属性文件中的值_Java_Spring_Spring Properties - Fatal编程技术网

Java Spring@Value未解析为属性文件中的值

Java 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

我以前在其他项目中也做过这个,我只是在做同样的事情,但由于某种原因它不起作用。Spring
@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;