@ConfigurationProperties使用中遇到的问题
用Spingboot 的小伙伴一定用过@ConfigurationProperties 注解。这个注解的作用就是将properties 或这yml中配置的参数 值根据key 注入到配置类(Java Bean) 中, 然后用@Autowried 在业务类中注入配置类,就可以获取配置文件中参数信息了,真的很方便。
@ConfigurationProperties 注解可以加在 配置类上或者加在 方法上,本文说下配置类上的使用方法。
1.pom文件引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 在properties 或 yml文件中 配置 参数 信息, 这里我就不沾代码了,截图看起来方便点。
3.创建配置类BookConfigBean.class,加@ConfigurationProperties(prefix ="book") 注解, prefix= "book" 一定要和配置类保持一致,配置类中属性名和配置信息中key 保持一致。并且使用lombok 工具中@Data注解自动生成get/set方法 ,如下:
4.在启动类中加入@EnableConfigurationProperties(BookConfigBean.class) 注解,如下
5.在测试类TestController 中注入BookConfigBean ,获取参数信息。
6.访问http://localhost:8080/test2, web页面查看配置信息
7.遇到的问题及总结:
第一,启动类未加@EnableConfigurationProperties(BookConfigBean.class) 注解, spring 会扫描不到配置类,报未扫描到配置类错误。
这个问题还可以在配置类BeanConfigBean 上加 @Component注解,标注配置类为javabean 交由spring管理。
第二,配置类BookConfigBean 未写get/ set 方法 , 会出现配置类能被spring 扫描到, 但值无法注入问题。从这点可以理解 , spring 是通过get/set 或 构造函数给类实例注入属性值。
本例我使用了,lombok工具中@Data 注解, 自动生成get/set 方法。
第三,使用@Value 注解也可以获取配置文件的配置信息,这两个注解各有自己的优点。