[英]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.properties
和application.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.