繁体   English   中英

如何在 Spring 2.7.2 中从 application.yml 读取配置值

[英]How do I read config values from application.yml in Spring 2.7.2

我在这里创建了一个简单的仓库来演示我的问题,以防万一它对任何人有帮助: https ://github.com/kevinm416/spring-boot-config。 我已经尝试过在不同教程中看到的不同 Spring 注释的各种迭代,但到目前为止没有任何效果。

我有一个非常标准的 Spring Boot 应用程序:

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

还有一个配置类:

@Component
@ConfigurationProperties(prefix = "feeds")
public class FeedsConfig {
    public List<String> urls;
    public String abc;
}

我已经单独并同时尝试了application.propertiesapplication.yml ,内容如下:

feeds:
  abc: def
  urls:
    - url1
    - url2
    - url3
base: level

当我将配置类@Autowire到控制器中时,不会填充应用程序配置中的值。

@RestController
public class HelloController {

    @Autowired
    private FeedsConfig feedsConfig;

    @Autowired
    private Environment environment;

    @RequestMapping("/hello")
    private String hello() {
        return "Hi " + feedsConfig.abc + ", " + feedsConfig.urls;
    }
}

我可以在propertySources下的 Environment 中看到我想要的值! 为什么我的配置类没有被填写?

调试器显示环境


我将 FeedsConfig 更改为此并且它正在工作! 谢谢尼古拉斯!

@ConstructorBinding
@ConfigurationProperties(prefix = "feeds")
public class FeedsConfig {
    public FeedsConfig(List<String> urls, String abc) {
        this.urls = urls;
        this.abc = abc;
    }
    public List<String> urls;
    public String abc;
}

假设组件被正确扫描,我看到两个问题:

  • FeedsConfig不应使用@Component注释
  • FeedsConfig应该有一个全参数构造函数并使用@ConstructorBinding进行注释以连接属性

这可以使用 Lombok 轻松实现(我在我的机器上使用相同的设置):

@Data
@ConfigurationProperties(prefix = "feeds")
@ConstructorBinding
@RequiredArgsConstructor
public class FeedsConfig {

    public List<String> urls;
    public String abc;
}

看起来您的配置属性类缺少@ConfigurationPropertiesScan注释。 也不再需要@Component@EnableConfigurationProperties 查看本教程,第 3.1 段https://www.baeldung.com/configuration-properties-in-spring-boot

@ConfigurationProperties(prefix = "feeds")
@EnableConfigurationProperties
public class FeedsConfig {
    public List<String> urls;
    public String abc;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM