@Value无法在Spring中工作@Configuration

时间:2017-10-04 12:33:51

标签: java spring dependency-injection properties

需要帮助,问题在哪里?

我有一个配置类,它将属性加载为

WebConfig.java

@Configuration
@PropertySource(value={"classpath:application.properties"})
class WebConfig extends WebMvcConfigurerAdapter{

    @Bean
    public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
       return new PropertySourcesPlaceholderConfigurer();
    }
}

我有另一个配置类,我试图将属性用作

MyServerConfig.java

@Configuration
class MyServerConfig {

    @Value("${server.url}")
    private String url;
...
}

application.properties

server.url=http://localhost:8080/test/abc

但是得到:

  

java.lang.IllegalArgumentException:无法解析占位符' server.url'。

不知道这里缺少什么?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

在将使用某个属性的类中使用@PropertyScan注释:

@Configuration
@PropertySource("classpath:application.properties")
class MyServerConfig {

    @Value( "${server.url}" )
    private String url;
}

答案 1 :(得分:0)

要获取@Value变量的值,不需要以任何特殊方式配置application.properties,因为始终会扫描此文件。因此,删除@PropertySource注释和PropertySourcesPlaceholderConfigurer bean。

如果您要添加其他.properties个文件(例如constants.propertiesdb-config.properties),则会使用这些文件。

所以只需删除它们并尝试再次运行您的应用程序

非常重要:

  1. 确保扫描使用@Value注释的类(如果您的BootApplication位于某个包而不是'main'包中,请添加正确的@SpringBootApplication(scanBasePackages = { "com.my.project" })注释)。

  2. 确保您的application.properties在您的课程

  3. 奖金如果您使用的是春季个人资料(例如:proddev),您还可以拥有application-prod.propertiesapplication-dev.properties个文件将根据您正在运行的配置文件进行扫描和包含。