@Value 在 Spring @Configuration 中不起作用

问题描述 投票:0回答:2

需要帮助,问题出在哪里?

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

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;
...
}

应用程序属性

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

但是得到:

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

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

java spring dependency-injection properties
2个回答
0
投票

在将使用某个属性的类中使用

@PropertyScan
注释:

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

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

0
投票

要获取

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

如果您想添加其他

.properties
文件(例如
constants.properties
db-config.properties
),请使用这些。

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

非常重要:

  1. 确保扫描使用

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

  2. 确保您的

    application.properties
    位于您的类路径上。

奖励如果您使用弹簧配置文件(例如:

prod
dev
),您还可以拥有
application-prod.properties
application-dev.properties
文件,这些文件将根据您运行的配置文件进行扫描和包含。

© www.soinside.com 2019 - 2024. All rights reserved.