springboot

springBoot 通过@ConfigurationPrope

2018-07-08  本文已影响122人  EricDD

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 使用位置为:方法 就已经可以从配置文件中获取内容。

上一篇下一篇

猜你喜欢

热点阅读