拼多多網(wǎng)頁qq登錄南昌seo公司
配置文件
SpringBoot使用一個(gè)全局的配置文件,配置文件名是固定的;
-
application.properties
-
application.yml
配置文件的作用:修改SpringBoot自動(dòng)配置的默認(rèn)值;SpringBoot在底層都給我們自動(dòng)配置好; ?
YAML(YAML Ain't Markup Language)
YAML A Markup Language:是一個(gè)標(biāo)記語言
YAML isn't Markup Language:不是一個(gè)標(biāo)記語言;
標(biāo)記語言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以數(shù)據(jù)為中心,比json、xml等更適合做配置文件;
YAML:配置例子
server:
? port: 8081
XML:
<server><port>8081</port> </server>
YAML語法:
基本語法
k:(空格)v:表示一對鍵值對(空格必須有);
以空格的縮進(jìn)來控制層級關(guān)系;只要是左對齊的一列數(shù)據(jù),都是同一個(gè)層級的
server:port: 8081servlet:context-path: /config
屬性和值也是大小寫敏感;
server.port=8081
server.servlet.context-path=/config
值的寫法
字面量
字面量:普通的值(數(shù)字,字符串,布爾)
k: v:字面直接來寫;
字符串默認(rèn)不用加上單引號或者雙引號;
"":雙引號;不會轉(zhuǎn)義字符串里面的特殊字符;特殊字符會作為本身想表示的意思
name: "zhangsan \n lisi":輸出;zhangsan 換行 lisi
'':單引號;會轉(zhuǎn)義特殊字符,特殊字符最終只是一個(gè)普通的字符串?dāng)?shù)據(jù)
name: ‘zhangsan \n lisi’:輸出;zhangsan \n lisi
Map
k: v:在下一行來寫對象的屬性和值的關(guān)系;注意縮進(jìn)
對象還是k: v的方式
friends:lastName: zhangsan age: 20
行內(nèi)寫法:
friends: {lastName: zhangsan,age: 18}
數(shù)組
數(shù)組(List、Set):
用- 值表示數(shù)組中的一個(gè)元素
pets:- cat- dog- pig
行內(nèi)寫法
pets: [cat,dog,pig]
配置文件值注入
方式一:@Value
方式二:@ConfigurationProperties
配置文件
person:lastName: jackage: 18boss: falsebirth: 2017/12/12maps: {k1: v1,k2: 12}lists:- lisi- zhaoliudog:name: 小狗age: 12
javaBean:?
/**
?* 將配置文件中配置的每一個(gè)屬性的值,映射到這個(gè)組件中
?* @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定;
?* ? ? ?prefix = "person":配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射
?*
?* 只有這個(gè)組件是容器中的組件,才能容器提供的@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;
? ? //省略get/set
} ? ?
案例一?(將配置文件中配置的每一個(gè)屬性的值,映射到組件中)
創(chuàng)建springboot項(xiàng)目
創(chuàng)建person類?
/*** 將配置文件中配置的每一個(gè)屬性的值,映射到這個(gè)組件中* @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定;* ? ? ?prefix = "person":配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射** 只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能;* ?@ConfigurationProperties(prefix = "person")默認(rèn)從全局配置文件中獲取值;**/ @Data//自動(dòng)getset方法 @Data @ConfigurationProperties(prefix = "zking.person" )//對比@value方法要方便,不用一個(gè)個(gè)寫(dog類為value方法綁定) public class Person {private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists; }
(讓類中的值來源于application.yml配置文件)
@Data @Component public class Dog {//@Value方式一:占位符@Value("${zking.dog.name}")//綁定屬性private String name;//@Value方式二:spel表達(dá)式@Value("#{3+1}")private Integer age; }
resource下創(chuàng)建application.yml配置文件
zking:dog:name: 五彩age: 2person:lastName: xxx #普通字符串寫法age: 18boss: truebirth: 2006/10/15maps:addr: beijingtel: 123456lists:- cat- dog- pig
測試(配置文件給類綁定屬性):
@Autowired Dog dog; /*** 測試 @Value*/ @Test public void testValue(){System.out.println(dog);//綁定了默認(rèn)值 }
輔助編寫配置文件工具
(我們可以導(dǎo)入配置文件處理器,以后編寫配置就有提示了 )
<!--導(dǎo)入配置文件處理器,配置文件進(jìn)行綁定就會有提示-->
?? ??? ?<dependency>
?? ??? ??? ?<groupId>org.springframework.boot</groupId>
?? ??? ??? ?<artifactId>spring-boot-configuration-processor</artifactId>
?? ??? ??? ?<optional>true</optional>
?? ??? ?</dependency>
數(shù)據(jù)校驗(yàn)
<!--數(shù)據(jù)校驗(yàn)-->
<dependency>
?? ?<groupId>org.springframework.boot</groupId>
?? ?<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
使用:
創(chuàng)建類
@Component @Data @ConfigurationProperties(prefix = "zking.person" ) @Validated//啟用校驗(yàn) //@PropertySource("classpath:person.properties")//指定加載屬性文件 //@ConfigurationProperties("person")// 配置屬性前綴為 person。 public class Person {@Email//email校驗(yàn)格式private String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;}
給值用的是配置類
創(chuàng)建application.yml
server:port: 8080# 指定要啟動(dòng)的環(huán)境 spring:profiles:active: druid zking:dog:name: 五彩age: 2person:lastName: xxx手動(dòng)閥@123.com #普通字符串寫法age: 18boss: truebirth: 2006/10/15maps:addr: beijingtel: 123456lists:- cat- dog- pig
測試:
@Test public void testConfigurationProperties(){System.out.println(person); }
方式三:person.properties給值
創(chuàng)建person.properties
person.lastName=jack@163.com
person.age=18
person.boss=false
person.birth=2017/12/12
person.maps.k1=v1
person.maps.k2=v2
person.lists=lisi,zhaoliu
綁定方式
@Component @Data //@ConfigurationProperties(prefix = "zking.person" )//yml文件綁定 @PropertySource("classpath:person.properties")//指定加載文件 public class Person {@Emailprivate String lastName;private Integer age;private Boolean boss;private Date birth;private Map<String,Object> maps;private List<Object> lists;}
application.yml
- 語法:YAML(YAML Ain't Markup Language)是一種人類可讀的數(shù)據(jù)序列化標(biāo)準(zhǔn),它使用縮進(jìn)和換行來表示數(shù)據(jù)結(jié)構(gòu)。
- 結(jié)構(gòu):YAML文件使用鍵值對的形式,并且支持嵌套結(jié)構(gòu),這使得配置更加清晰和易于管理。
person.properties
- 語法:Properties文件使用簡單的鍵值對格式,鍵和值之間用等號(=)分隔。
- 結(jié)構(gòu):Properties文件不支持嵌套結(jié)構(gòu),所有的配置都是平鋪的。如果需要表示層級關(guān)系,通常會使用點(diǎn)(.)來分隔鍵。
Profile
多Profile文件
我們在主配置文件編寫的時(shí)候,文件名可以是 application-{profile}.properties/yml
默認(rèn)使用application.properties的配置;
yml支持多文檔塊方式
server:
? port: 8081
spring:
? profiles:
? ? active: prod#默認(rèn)激活---
server:
? port: 8083
spring:
? config:
? ? activate:
? ? ? on-profile: dev
---server:
? port: 8084
spring:
? config:
? ? activate:
? ? ? on-profile: prod ?#指定激活哪個(gè)環(huán)境
激活指定profile
1、在配置文件中指定 spring.profiles.active=dev
可以是多個(gè)配置,中間使用逗號隔開
2、命令行(cmd):
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在測試的時(shí)候,配置傳入命令行參數(shù)
3、虛擬機(jī)參數(shù);
-Dspring.profiles.active=dev
命令行方式 > Java系統(tǒng)屬性方式 > 系統(tǒng)變量方式 > 配置文件方式
案例
創(chuàng)建配置文件application.yml、application-dev.yml、application-prod.yml
看這個(gè):# 指定要啟動(dòng)的環(huán)境
server:port: 8080# 指定要啟動(dòng)的環(huán)境會覆蓋默認(rèn)8080這個(gè)配置 spring:profiles:active: dev zking:dog:name: 五彩age: 2person:lastName: xxx手動(dòng)閥 #普通字符串寫法age: 18boss: truebirth: 2006/10/15maps:addr: beijingtel: 123456lists:- cat- dog- pig
#dev開發(fā)環(huán)境 server:port: 8081
#生產(chǎn)環(huán)境 server:port: 8082
配置文件加載位置
springboot 啟動(dòng)會掃描以下位置的application.properties或者application.yml文件作為Spring boot的默認(rèn)配置文件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
優(yōu)先級由高到底,高優(yōu)先級的配置會覆蓋低優(yōu)先級的配置;
SpringBoot會從這四個(gè)位置全部加載主配置文件;互補(bǔ)配置;
==我們還可以通過spring.config.location來改變默認(rèn)的配置文件位置==
項(xiàng)目打包好以后,我們可以使用命令行參數(shù)的形式,啟動(dòng)項(xiàng)目的時(shí)候來指定配置文件的新位置;指定配置文件和默認(rèn)加載的這些配置文件共同起作用形成互補(bǔ)配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties