Spring @Value没有解析为属性文件中的值

TS-*_*TS- 56 java spring spring-properties

之前我曾经在其他项目中工作,我只是重新做同样的事情,但由于某种原因,它不起作用.Spring @Value不是从属性文件中读取,而是从字面上理解值

AppConfig.java

@Component
public class AppConfig
{
    @Value("${key.value1}")
    private String value;

    public String getValue()
    {
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

appconfig.properties

key.value1=test value 1
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有:

@Autowired
private AppConfig appConfig;
Run Code Online (Sandbox Code Playgroud)

应用程序启动很好,但是当我这样做

appConfig.getValue()
Run Code Online (Sandbox Code Playgroud)

它返回

${key.value1}
Run Code Online (Sandbox Code Playgroud)

它不会解析为属性文件中的值.

思考?

Sac*_*ngh 59

我也发现原因@value不起作用,@value需要PropertySourcesPlaceholderConfigurer代替一个PropertyPlaceholderConfigurer.我做了相同的更改,它对我有用,我使用的是Spring 4.0.3版本.我在配置文件中使用下面的代码配置了这个 -

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
Run Code Online (Sandbox Code Playgroud)


TS-*_*TS- 17

问题是由于我的applicationContext.xml和spring-servlet.xml中的问题 - 它是bean之间的范围问题.

pedjaradenkovic向我指出了一个现有的资源: @Controller类中的Spring @Value注释没有评估属性文件中的值,Spring 3.0.5没有从属性中评估@Value注释


Use*_*007 15

就我而言,不会注入静态字段.


Nar*_*pai 11

就我而言,我缺少花括号。我有@Value("foo.bar") String value而不是正确的形式@Value("${foo.bar}") String value

  • 你让我很开心,谢谢 (2认同)

Dap*_*Dan 8

对于 Sprig-boot 用户,PropertyPlaceholderConfigurer 和 Spring 3.1 中添加的新 PropertySourcesPlaceholderConfigurer。所以访问属性文件很简单。只需注入

注意:确保您的财产不得 Static

@Value("${key.value1}")
private String value;
Run Code Online (Sandbox Code Playgroud)


小智 5

@Value 有时可能需要一天或半天才能解决;)。

这是我所做的:

  1. 将属性添加到属性或 YAML 文件

  2. 确保主类用 @EnableAutoConfiguration 或 @SpringBootApplication 注解

  3. 创建可以在其中使用 @Value 的 AppConfig

    @Value("${PROPERTY}") 私有字符串 URL;

在类级别使用 @Configuration 注释此 AppConfig

  1. 到目前为止,设置已完成,现在可以通过自动装配 AppConfig 在任何您想要的地方使用它

示例:在某些服务中@Autowired private AppConfig appConfig;并在此服务的方法中调用 appConfig.getUrl() 从属性文件中获取属性 URL 的值。

注意:不要尝试在服务构造函数中获取值,它将为空。

  • 非常感谢 - 这就是我的观点“注意:不要尝试在服务构造函数中获取价值,否则它将为空。” (2认同)