拼多多網(wǎng)頁(yè)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)記語(yǔ)言
YAML isn't Markup Language:不是一個(gè)標(biāo)記語(yǔ)言;
標(biāo)記語(yǔ)言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以數(shù)據(jù)為中心,比json、xml等更適合做配置文件;
YAML:配置例子
server:
? port: 8081
XML:
<server><port>8081</port> </server>
YAML語(yǔ)法:
基本語(yǔ)法
k:(空格)v:表示一對(duì)鍵值對(duì)(空格必須有);
以空格的縮進(jìn)來(lái)控制層級(jí)關(guān)系;只要是左對(duì)齊的一列數(shù)據(jù),都是同一個(gè)層級(jí)的
server:port: 8081servlet:context-path: /config
屬性和值也是大小寫(xiě)敏感;
server.port=8081
server.servlet.context-path=/config
值的寫(xiě)法
字面量
字面量:普通的值(數(shù)字,字符串,布爾)
k: v:字面直接來(lái)寫(xiě);
字符串默認(rèn)不用加上單引號(hào)或者雙引號(hào);
"":雙引號(hào);不會(huì)轉(zhuǎn)義字符串里面的特殊字符;特殊字符會(huì)作為本身想表示的意思
name: "zhangsan \n lisi":輸出;zhangsan 換行 lisi
'':單引號(hào);會(huì)轉(zhuǎn)義特殊字符,特殊字符最終只是一個(gè)普通的字符串?dāng)?shù)據(jù)
name: ‘zhangsan \n lisi’:輸出;zhangsan \n lisi
Map
k: v:在下一行來(lái)寫(xiě)對(duì)象的屬性和值的關(guān)系;注意縮進(jìn)
對(duì)象還是k: v的方式
friends:lastName: zhangsan age: 20
行內(nèi)寫(xiě)法:
friends: {lastName: zhangsan,age: 18}
數(shù)組
數(shù)組(List、Set):
用- 值表示數(shù)組中的一個(gè)元素
pets:- cat- dog- pig
行內(nèi)寫(xiě)法
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" )//對(duì)比@value方法要方便,不用一個(gè)個(gè)寫(xiě)(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; }
(讓類中的值來(lái)源于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 #普通字符串寫(xiě)法age: 18boss: truebirth: 2006/10/15maps:addr: beijingtel: 123456lists:- cat- dog- pig
測(cè)試(配置文件給類綁定屬性):
@Autowired Dog dog; /*** 測(cè)試 @Value*/ @Test public void testValue(){System.out.println(dog);//綁定了默認(rèn)值 }
輔助編寫(xiě)配置文件工具
(我們可以導(dǎo)入配置文件處理器,以后編寫(xiě)配置就有提示了 )
<!--導(dǎo)入配置文件處理器,配置文件進(jìn)行綁定就會(huì)有提示-->
?? ??? ?<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 #普通字符串寫(xiě)法age: 18boss: truebirth: 2006/10/15maps:addr: beijingtel: 123456lists:- cat- dog- pig
測(cè)試:
@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
- 語(yǔ)法:YAML(YAML Ain't Markup Language)是一種人類可讀的數(shù)據(jù)序列化標(biāo)準(zhǔn),它使用縮進(jìn)和換行來(lái)表示數(shù)據(jù)結(jié)構(gòu)。
- 結(jié)構(gòu):YAML文件使用鍵值對(duì)的形式,并且支持嵌套結(jié)構(gòu),這使得配置更加清晰和易于管理。
person.properties
- 語(yǔ)法:Properties文件使用簡(jiǎn)單的鍵值對(duì)格式,鍵和值之間用等號(hào)(=)分隔。
- 結(jié)構(gòu):Properties文件不支持嵌套結(jié)構(gòu),所有的配置都是平鋪的。如果需要表示層級(jí)關(guān)系,通常會(huì)使用點(diǎn)(.)來(lái)分隔鍵。
Profile
多Profile文件
我們?cè)谥髋渲梦募帉?xiě)的時(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è)配置,中間使用逗號(hào)隔開(kāi)
2、命令行(cmd):
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;
可以直接在測(cè)試的時(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)境會(huì)覆蓋默認(rèn)8080這個(gè)配置 spring:profiles:active: dev zking:dog:name: 五彩age: 2person:lastName: xxx手動(dòng)閥 #普通字符串寫(xiě)法age: 18boss: truebirth: 2006/10/15maps:addr: beijingtel: 123456lists:- cat- dog- pig
#dev開(kāi)發(fā)環(huán)境 server:port: 8081
#生產(chǎn)環(huán)境 server:port: 8082
配置文件加載位置
springboot 啟動(dòng)會(huì)掃描以下位置的application.properties或者application.yml文件作為Spring boot的默認(rèn)配置文件
–file:./config/
–file:./
–classpath:/config/
–classpath:/
優(yōu)先級(jí)由高到底,高優(yōu)先級(jí)的配置會(huì)覆蓋低優(yōu)先級(jí)的配置;
SpringBoot會(huì)從這四個(gè)位置全部加載主配置文件;互補(bǔ)配置;
==我們還可以通過(guò)spring.config.location來(lái)改變默認(rèn)的配置文件位置==
項(xiàng)目打包好以后,我們可以使用命令行參數(shù)的形式,啟動(dòng)項(xiàng)目的時(shí)候來(lái)指定配置文件的新位置;指定配置文件和默認(rèn)加載的這些配置文件共同起作用形成互補(bǔ)配置;
java -jar spring-boot-02-config-02-0.0.1-SNAPSHOT.jar --spring.config.location=G:/application.properties