SpringBoot使用一个全局的配置文件,文件名固定,二选一即可:
- application.properties
- application.yml
1. 基本语法
样例:
server:
port: 8080
- k: v:表示一对键值对(冒号后的空格必须有)。
- 且以空格的缩进控制层级关系,只要是左对齐的一列数据,都属于同一层级。
- 大小写敏感。
- 字符串不用加上单引号或双引号。
- 对象、map:
friends:
lastName: zhangsan
age: 20
或者friends: {lastName: zhangsan,age: 18}
- 数组:
pets:
- cat
- dog
- pig
或者pets: [cat,dog,pig]
2. 属性绑定
yml文件内容:
person:
name: zhangsan
age: 20
list:
- name: xiaobai
age: 2
- name: xiaohua
age: 3
待绑定java对象:
核心@ConfigurationProperties(prefix = "person")
,代表从yml文件中的person字段中拿数据。
//添加到容器中,以便@Autowired直接从容器中拿person对象
@Component
//从yml文件中绑定属性
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private Integer age;
private List<HashMap> list;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", list=" + list +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public List<HashMap> getList() {
return list;
}
public void setList(List<HashMap> list) {
this.list = list;
}
}
person对象打印结果为:
Person{name='zhangsan', age='22', list=[{age=13, name=xiaobai}, {age=11, name=xiaolizi}]}
3. 配置文件处理器
编写配置文件时会有提示。pom文件导入插件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4. @value
@value可以单独的为某个属性绑定配置文件得值,而@ConfigurationProperties为批量式绑定。
@Controller
public class HelloController {
//属性绑定
@Value("${person.name}")
String personName;
//SpEL
@Value("#{23-3}")
String age;
@Autowired
Person person;
@ResponseBody
@RequestMapping("/hello")
public String hello(){
System.out.println(person);
return personName+age;
}
}
此处将会返回:张三20
5. 配置类
//指明当前类是一个配置类,替代了Spring配置文件
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中,容器中组件的默认id为方法名
@Bean
public HelloService helloService(){
System.out.println("配置类@Bean给容器里添加组件了...");
return new HelloService();
}
}
6.配置文件占位符
${random.uuid}
、${random.int}
、${random.long}
、${random.int(10)}
、${random.int(1,10)}
server:
port: 8081
person:
name: zhangsan${random.uuid}
age: ${random.int}
list:
- name: ${person.name}_xiaobai
age: 13
- name: ${person.name}_xiaolizi
age: 11
输出结果:Person{name='zhangsanb82979ef-da61-4c5b-ba7e-67d539de9668', age='-1926007151', list=[{age=13, name=zhangsan29f90cf1-3645-48b1-88ab-e61830bfa3b0_xiaobai}, {age=11, name=zhangsanc4aac9b1-a302-4e39-87ae-e4a4d8633796_xiaolizi}]}