美文网首页springboot
springBoot 通过@ConfigurationPrope

springBoot 通过@ConfigurationPrope

作者: EricDD | 来源:发表于2018-07-08 08:17 被阅读122次

    springBoot 的出现使我省去了使用spring时的繁琐的xml配置。相当多的xml。并且tomcat 内置了。直接打成jar就可执行了。不必再去部署tomcat。

    springBoot 时如何实现从配置文件中读取内容的呢?

    @ConfigurationProperties与@Value

    @ConfigurationProperties 与 @Value 两个注解的作用都是从配置文件中获取配置项。本次只讨论@ConfigurationProperties

    @ConfigurationProperties 使用
    源码.png

    进入 @ConfigurationProperties注解源码发现:
    @Target({ ElementType.TYPE, ElementType.METHOD })
    该注解的使用位置: 1. 类、接口(包括注释类型)或枚举 2. 方法

    @ConfigurationProperties 注解的使用位置: 类、接口(包括注释类型)或枚举 示例代码如下:

    项目结构.png

    @ConfigurationProperties 使用位置:类、接口(包括注释类型)或枚举

    @Data // 此处使用了 lombok 来简化代码。
    @Component // 添加Person 到 spring 容器中
    @ConfigurationProperties(prefix = "person") // perfix 对应配置文件前缀
    public class Person {
        private String name;
        private String fullName;
        private Integer age;
        private List<String> list;
        private Map<String,String> map;
        private Dog dog;
    }
    
    @Data
    public class Dog {
        private String name;
        private Integer age;
    }
    
    <!--pom.xml 添加依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    
    # 配置文件内容
    person:
      name: xiaoming
      full-name: 小明
      age : 11
      list:
        -a -b -c -d
      map: {key1: value1,key2: value2}
      dog:
        name: tom
        age: 3
    
    // 获取配置文件内容 
    @Autowired
     private Person person;
    
     @GetMapping("/getPerson")
     public Person getPerson(){
         return person;
     }
    
    结果.png

    至此@ConfigurationProperties 使用位置为: 类、接口(包括注释类型)或枚举 就已经可以从配置文件中获取内容。

    @ConfigurationProperties 使用位置:方法
    这种方式需要配合@Bean 和@Configuration 使用。
    示例代码如下:

    // 普通类,除去lombok 注解之外无其他注解
    @Data
    public class Person {
        private String name;
        private String fullName;
        private Integer age;
        private List<String> list;
        private Map<String,String> map;
        private Dog dog;
    }
    
    @Data
    public class Dog {
        private String name;
        private Integer age;
    }
    
    @Configuration //定义此类为配置类
    @RestController 
    public class HelloController {
        @GetMapping("/getPerson")
        public Person getPerson(){
            return person();
        }
        
        // @Bean 相当于使用spring xml 配置时,在xml中定义一个Bean组件,该@Bean定义的方法必须在@Configuration注解的类才能生效
        @Bean  
        @ConfigurationProperties(prefix = "person")
        public Person person(){
            return new Person();
        }
    }
    
    结果.png

    至此@ConfigurationProperties 使用位置为:方法 就已经可以从配置文件中获取内容。

    相关文章

      网友评论

        本文标题:springBoot 通过@ConfigurationPrope

        本文链接:https://www.haomeiwen.com/subject/vztwuftx.html