SpringBoot @ConfigurationProperties实现类型安全的配置(基于properties) 使用过程及碰到的问题解决

前言:

    使用@ConfigurationProperties将properties属性和一个Bean及其属性关联,可以方便的实现类型安全的配置,比@Value需要注入很多次方便很多。

    这里记录@ConfigurationProperties使用过程中碰到的问题及解决方案

碰到的问题:

  1. SpringBoot 1.5以上版本@ConfigurationProperties取消location注解
  2. SpringBoot Configuration Annotation Processor not found in classpath错误
  3. Re-run Spring Boot Configuration Annotation Processor to update generated metadata警告

注:解决方案在文章最后

使用过程:

    目的:通过使用@ConfigurationProperties注解,及相应的Bean,实现类型安全的配置

    1、首先在resources目录下新建一个test.properties文件,具体目录结构如下:

     SpringBoot @ConfigurationProperties实现类型安全的配置(基于properties) 使用过程及碰到的问题解决_第1张图片  

     test.properties内容为:

author.name = xafxa
author.age = 18

注:相同属性前缀必须一样,如这里的author,格式为 xxx.xxxx

    2、创建相应的Bean及其属性,具体目录结构如下:

    

   AuthorSettingsBean内容如下:

@Component                                       //标记本类为一个Bean,可以使用@Autowried注入
@PropertySource("classpath:test.properties")     //SpringBoot 1.5以上版本取消 @ConfigurationProperties中location属性,这里用@PropertySource代替
@ConfigurationProperties(prefix = "author")      //@ConfigurationProperties中填写需要用到 prefix
public class AuthorSettingsBean {
    private String name;                         //这里的属性内容对应 test.properties中author.name, author.age配置
    private String age;

    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name = name;
    }

    public String getAge(){
        return this.age;
    }
    public void setAge(String age){
        this.age = age;
    }
}

3、使用,这里新建一个TestController,在TestController中获取我们先前配置的author信息

目录结构如下:


TestController.java内容如下:

@RestController
@EnableConfigurationProperties(AuthorSettingsBean.class) //重要,激活绑定的Bean
public class TestController {
    @Autowired                                           //将绑定的某个bean自动注入
    private AuthorSettingsBean author;

    @RequestMapping("/test")
    public String test(){
        return "author info: name: " + author.getName() + " age: " + author.getAge();
    }
}

4、验证,在浏览中输入 http://localhost:9090/test (注:这里的9090端口是我的测试工程配置,默认为8080),查看结果如下:

SpringBoot @ConfigurationProperties实现类型安全的配置(基于properties) 使用过程及碰到的问题解决_第2张图片

以上就是@CofigurationProperties的使用过程,下面来解决文章开头提到的问题


解决碰到的问题:

1、Springboot 1.5以上版本@ConfigurationProperties取消location的替代方案,这里做具体流程简述,详细过程可以看上面使用过程。

    a、在相应Bean上写 @PropertySource注解,写明classpath,如:

    @PropertySource("classpath:test.properties")

    b、使用的时候,如在例子中的TestController,写@EnableConfigurationProperties 激活相应的Bean,如

    @EnableConfigurationProperties(AuthorSettingsBean.class)

    c、使用@Autowired自动注入

2、Spring Boot Configuration Annotation Processor not found in classpath错误:

    需要在pom.xml引入注解依赖,具体如下:

		
			org.springframework.boot
			spring-boot-configuration-processor
			true
		

3、Re-run警告:

    这个目前还没找到合适的解决方案,不过只是一个提示,影响不大

    尝试过的办法:

              重启Idea、rebuild  失败

              参照如下链接:

https://stackoverflow.com/questions/33483697/re-run-spring-boot-configuration-annotation-processor-to-update-generated-metada  没具体解决。



你可能感兴趣的:(SpringBoot坑及解决)