SpringBoot使用一個(gè)全局的配置文件,文件名固定,二選一即可:
- application.properties
- application.yml
1. 基本語(yǔ)法
樣例:
server:
port: 8080
- k: v:表示一對(duì)鍵值對(duì)(冒號(hào)后的空格必須有)。
- 且以空格的縮進(jìn)控制層級(jí)關(guān)系,只要是左對(duì)齊的一列數(shù)據(jù),都屬于同一層級(jí)。
- 大小寫(xiě)敏感。
- 字符串不用加上單引號(hào)或雙引號(hào)。
- 對(duì)象、map:
friends:
lastName: zhangsan
age: 20
或者friends: {lastName: zhangsan,age: 18}
- 數(shù)組:
pets:
- cat
- dog
- pig
或者pets: [cat,dog,pig]
2. 屬性綁定
yml文件內(nèi)容:
person:
name: zhangsan
age: 20
list:
- name: xiaobai
age: 2
- name: xiaohua
age: 3
待綁定java對(duì)象:
核心@ConfigurationProperties(prefix = "person"),代表從yml文件中的person字段中拿數(shù)據(jù)。
//添加到容器中,以便@Autowired直接從容器中拿person對(duì)象
@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對(duì)象打印結(jié)果為:
Person{name='zhangsan', age='22', list=[{age=13, name=xiaobai}, {age=11, name=xiaolizi}]}
3. 配置文件處理器
編寫(xiě)配置文件時(shí)會(huì)有提示。pom文件導(dǎo)入插件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4. @value
@value可以單獨(dú)的為某個(gè)屬性綁定配置文件得值,而@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;
}
}
此處將會(huì)返回:張三20
5. 配置類(lèi)
//指明當(dāng)前類(lèi)是一個(gè)配置類(lèi),替代了Spring配置文件
@Configuration
public class MyAppConfig {
//將方法的返回值添加到容器中,容器中組件的默認(rèn)id為方法名
@Bean
public HelloService helloService(){
System.out.println("配置類(lèi)@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
輸出結(jié)果: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}]}