【问题标题】:SpringBoot does not resolve @Value properties without PropertySource annotationSpringBoot 不解析没有 PropertySource 注释的 @Value 属性
【发布时间】:2020-05-08 16:40:08
【问题描述】:

我在 SpringBoot 配置文件中有一堆 @Value 注释字段,在标准 application.properties 中具有匹配值。如果我不注释配置文件with @PropertySource("classpath:application.properties"),它只会将“${prop1}”字符串复制到实际变量中。

我尝试将@EnableAutoConfiguration 添加到@Configuration 类(而不是PropertySource 注释),但它所做的只是在找不到请求的属性时中断。

SpringBoot 应该从标准的application.properties 文件中自动解析属性,为什么会出现这种行为?使用版本 2.2.2.RELEASE

更新:

答案是正确的,它不起作用的原因是我在测试中调用了这些属性。使用 @SpringBootTest 注释测试可以解决此问题。事实上,当应用程序运行时,@SpringBootApplication 会发挥作用

【问题讨论】:

  • 你能添加你的配置文件和你想注入值的类吗? Spring Boot 应该自动解析 application.properties 文件中的属性。
  • 你有没有标记为@SpringBootApplication的主要方法?

标签: spring-boot


【解决方案1】:

正如您在this article (chapter 5) 中看到的,SpringBoot 会自动管理application.properties 文件。

我不知道这是否是您的问题,因为我没有看到代码,但是在 Spring Boot 中,Application 类应该使用@SpringBootApplication 进行注释。

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

看看this starting example。


然后您可以通过这种方式将值注入到控制器类中:

@RestController
public class HelloController {

    @Value("${test}")
    private String test;

    @RequestMapping("/test")
    String hello() {
        return test;
    }

}

【讨论】:

    猜你喜欢
    • 2012-11-23
    • 2020-10-22
    • 1970-01-01
    • 2022-06-22
    • 2016-05-21
    • 1970-01-01
    • 2016-01-25
    • 2013-04-02
    • 2011-07-13
    相关资源
    最近更新 更多