2017-10-04 49 views
2

需要帮助,问题在哪里?@Value在春季不工作@Configuration

我有加载性能

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'。

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

+1

你为什么在类'WebConfig'' static'中创建方法'propertySourcesPlaceholderConfigurer'? – Jesper

+0

你可以发布你的配置** application.properties **文件吗? – 2017-10-04 12:39:08

+0

@Jesper只是尝试我在谷歌找到的解决方案之一,即使你删除静态或完全删除方法,它不工作 –

回答

3

使用@PropertyScan标注在一定的财产将被使用的类:

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

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

已经尝试过!不为我工作。 –

+0

有没有错误? “不为我工作”并不能帮助我找到适合您的解决方案。 –

+0

它只是在这里不起作用,而以类似的方式在@Service类 –

0

用于获取值,请@Value变量,不需要application.properties,因为这个文件中的任何特殊的方式来进行配置总是被扫描。因此删除@PropertySource注释和PropertySourcesPlaceholderConfigurer bean。

这些用于如果您想添加其他.properties文件(例如constants.propertiesdb-config.properties)。

所以只要去掉这些,并尝试运行你的应用程序再次

非常重要:

  1. 确保您扫描使用了@Value注解类(如果你的BootApplication在一些包而不是'主'包,添加适当的注释)。

  2. 确保您application.properties是你的classpath

奖金如果您使用的春天配置文件(如:proddev),你也可以有application-prod.propertiesapplication-dev.properties文件将被扫描并包括取决于您正在运行的配置文件。