一、Spring Boot 的全局配置文件(application.properties、application.yml)
1.這兩種配置文件是SpringBoot 支持的對默認配置修改的格式。命名和格式是一樣的,不能隨意改名。我們來分別說一下這兩種格式的配置文件對SpringBoot配置及區別。
這兩個配置文件的作用:SpringBoot在底層已經幫我們默認配置好,我們可以通過配置文件來修改默認的配置,如對Tomcat的端口配置等等。
2.首先來說一下的是application.properties這個文件。(我們來修改tomcat端口)
2.1啟動主程序,這是tomcat控制台打印的信息
2.2修改成功
3.對於application.yml這個文件而言,修改tomcat端口。(注釋掉application.properties的端口配置)
3.1在application.properties同一個路徑下新增一個"application.yml",如下圖。
添加修改tomcat代碼。
運行效果
訪問效果(還是一樣的效果)
這兩種簡單的配置比較,application.yml比較簡潔、配置簡單。推薦使用。以下着重介紹application.yml語法。
二、yaml 語法(大小寫敏感)
1.yaml語法的精髓在與對空格的使用,可謂使用得淋漓盡致。
yaml語法主要是K:(冒號后面是空格) V值的形式(注意空格的使用)
空格的另一個重要的使用時對配置文件的層級關系的控制,如:
server:
port: 8090
address: /hello -->這:后都有空格,空格也控制層級關系
2.yaml對不同類型的值的操作:(只要記得 空格是神奇的存在)
對於(數值、字符串、和布爾)對於配置的值是字符串,不用雙引號和單引號,直接寫就可以了,若使用雙引號的話會將特殊字符轉義,使用單引號則會原樣輸出,不會對
特殊字符轉義
例如:name: "小二\n 過來"-------------------->會這樣輸出 小二 換行 過來
name: '小二\n 過來'--------------------->會這樣輸出 小二 \n 過來(沒有變化)
對於K : V形式(對象、Map)鍵值對類型
方法一、對象和Map占一行,屬性和值會在另一行
Person:
name: lcaiqin
age: 23
方法二、將所用配置寫在一行里面
Person: {name: lcaiqin,age: 23}
//--->>注意空格的使用
對於數組(List,Set)
方法一、使用- value的形式。如:注意是- 空格 值
Pets:
- dog
- cat
- pig
方法二、使用一行解決。注意是:冒號 空格
Pets: [cat,dog,pig]
三、yaml配置文件的值注入
在實體類中編寫如下代碼:
@Component //@ConfigurationProperties在Spring容器中運行需要組件的支持 @ConfigurationProperties(prefix = "person") //告訴SpringBoot的所有屬性和配置文件映射起來。prefix = "person"指從配置文件的什么位置映射 public class Person { //基本類型 private String name; private Integer age; private Boolean Boos; //對象 private Cart cart; private Map<String,Object> map; //數組 private List<Object> list;
寫法一、在application.yml中輸入如下代碼。
person: name: 獨而不孤 age: 23 Boos: true cart: name: 奧迪 color: 白色 map: k1: v1 k2: v2 list: - apple - pear
- eat
寫法二、在application.yml中輸入如下代碼。(一行元素搞定)
person:
name: 獨而不孤
age: 23
cart: {name: 奧迪,color: 白色}
list: [apple,pear,eat]
map: {k1: v1,k2: v2}
Boos:true
四、application.properits配置文件注入
bean中代碼:
//基本類型
@Value("${person.name}") //使用el表達式,從配置文件中取出
private String name; @Value("${person.age}") private Integer age; private Boolean Boos;
application.propeerties代碼:
person.age=23
person.boos=true
person.cart.name=奧迪
person.cart.color=白色
person.name=獨而不孤
person.map.k1=值1
person.map.k2=值2
person.list.list1=apple
運行效果:亂碼
解決亂碼:"File">>"Settings">>"Editor">>"File Encodings"
這樣就可以了。
五、@Value和@ConfigurationProperties的比較(@ConfigurationPropertis要配合@Component)
@ConfigurationPropertis |
@Value |
|
功能上 |
對所有的屬性進行注入值 |
一個一個注入值 |
語法復雜程度 |
簡單(可以一行一個一元素) |
元素冗余 |
SpEL |
不支持 |
支持 |
JSR303數據校驗 |
支持 |
不支持 |
復雜類型封裝 |
支持 |
不支持 |
個人覺得(除了需要對個別的屬性賦值之外)都建議使用@ConfigurationProperties
1.對JSR303數據校驗
@Component @ConfigurationProperties(prefix = "person")
@Validated -->加入此標簽 public class Person { //基本類型
@Email
private String name;
private Integer age; private Boolean Boos;
運行效果