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. 方法
项目结构.png@ConfigurationProperties 注解的使用位置: 类、接口(包括注释类型)或枚举 示例代码如下:
@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 使用位置为:方法 就已经可以从配置文件中获取内容。