@ConfigurationProperties注解
@ConfigurationProperties是springboot提供读取配置文件的一个注解
注意:
- 前缀定义了哪些外部属性将绑定到类的字段上
- 根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配
- 我们可以简单地用一个值初始化一个字段来定义一个默认值
- 类本身可以是包私有的
- 类的字段必须有公共 setter 方法
- 这个prefix 必须小写,不然会报错
示例1:作用于Class类及其用法
配置文件:
person:
lastName: hello
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1,k2: 12}
lists:
- lisi
- zhaoliu
dog:
name: 小狗
age: 12
java代码:
/**
* 将配置文件中配置的每一个属性的值,映射到这个组件中
* @ConfigurationProperties:告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
* prefix = "person":配置文件中哪个下面的所有属性进行一一映射
prefix属性,通过指定的前缀,绑定配置文件中的配置,该注解可以放在类上,也可以 放在方法上
*
* 只有这个组件是容器中的组件,才能容器提供的@ConfigurationProperties功能;
*
*/
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
用法:
@Controller
@RequestMapping("/config")
public class ConfigurationPropertiesController {
@Autowired
private Person person;
@RequestMapping("/test")
@ResponseBody
public Map<String, Object> test(){
Map<String, Object> map = new HashMap<>();
map.put("lasName", person.getLastName());
map.put("age", person.getAge());
map.put("boss",person.getBoss());
map.put("maps",person.getMaps());
map.put("lists",person.getLists());
return map;
}
}
我们可以导入配置文件处理器,以后编写配置就有代码提示了
<!--导入配置文件处理器,配置文件进行绑定就会有提示-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
示例2:作用于方法 比较常见的就是配置读写分离的场景。
配置文件:
#数据源
spring.datasource.druid.write.url=jdbc:uxdb://localhost:3306/uxdb
spring.datasource.druid.write.username=root
spring.datasource.druid.write.password=1
spring.datasource.druid.write.driver-class-name=com.uxsino.uxdb.Driver
spring.datasource.druid.read.url=jdbc:uxdb://localhost:3306/uxdb
spring.datasource.druid.read.username=root
spring.datasource.druid.read.password=1
spring.datasource.druid.read.driver-class-name=com.uxsino.uxdb.Driver
java代码:
@Configuration
public class DruidDataSourceConfig {
/**
* DataSource 配置
* @return
*/
@ConfigurationProperties(prefix = "spring.datasource.druid.read")
@Bean(name = "readDruidDataSource")
public DataSource readDruidDataSource() {
return new DruidDataSource();
}
/**
* DataSource 配置
* @return
*/
@ConfigurationProperties(prefix = "spring.datasource.druid.write")
@Bean(name = "writeDruidDataSource")
@Primary
public DataSource writeDruidDataSource() {
return new DruidDataSource();
}
}