简介
目前springboot是大部分java开发人员的首要选择,在平时工作中我们可能会有部分特殊的配置或者是自研的框架、模块需要用到application.yml自定义配置,以往通过@value
注解来读取配置文件,现在介绍一种更优雅的方式来读取配置文件,采用@ConfigurationProperties
注解
@ConfigurationProperties注解
我们模拟一个场景,与第三方系统对接,我们常常需要配置对方地址、部分接口信息、加密密钥等参数,我们先来看看最简单的情况如下
@ConfigurationProperties(prefix = "external")
@Getter
@Setter
@ToString
public class ExternalProperties {
private String baseUrl;
private String privateKey;
}
配置文件中只含有最基本的类型,prefix
表示配置的前缀,这样一个最简单的配置类就完成了,但是目前配置类并不会生效,因为需要把配置类交给spring容器进行管理才能完成配置的自动注入,注意:一定需要有getter、setter方法,常见的方式有两种:
1. @Component注解
通过@Component
注解可以让配置类成为spring bean也就加入了Spring容器,这种方式比较简单,但是不能细粒度的控制,需要注意的是这种方式需要spring扫描到配置类,常用的方式是@ComponentScan
或@SpringBootApplication
注解配置扫描路径,springboot默认是从启动类开始逐级向下扫描,所以启动类在最外层无需做特殊配置,只有在需要做更精细化的扫描时需要特别注意
@ConfigurationProperties(prefix = "external")
@Getter
@Setter
@ToString
@Component
public class ExternalProperties {
private String baseUrl;
private String privateKey;
}
2. @EnableConfigurationProperties注解
Spring Boot 2.2之后,提供了@EnableConfigurationProperties
注解,并将 value
设置为{ExternalProperties.class}
如下:
@SpringBootApplication
@EnableConfigurationProperties({ExternalProperties.class})
public class App