二该肴、SpringBoot的配置--yaml

1、配置文件

SpringBoot使用一個全局的配置文件障陶,配置文件名是固定的滋恬;

  • application.properties
  • application.yml

配置文件的作用:修改SpringBoot自動配置的默認(rèn)值;SpringBoot在底層都給我們自動配置好咸这;

YAML 是一個標(biāo)記語言

標(biāo)記語言:

以前的配置文件夷恍;大多都使用的是xxx.xml文件

YAML:以數(shù)據(jù)為中心,比json媳维、xml等更適合做配置文件

YAML:配置例子

server:
  port: 8081

XML:

<server>
  <port>8081</port>
</server>

2、YAML語法

2.1遏暴、基本語法

k:(空格)v : 表示一對鍵值對(空格必須有)

以空格的縮進(jìn)來控制層級關(guān)系侄刽;只要是左對齊的一列數(shù)據(jù),都是同一個層級的

server:
  port: 8081
  path: /hello

屬性和值也是大小寫敏感朋凉;

2.2州丹、值的寫法

字面量:普通的值(數(shù)字,字符串杂彭,布爾)

k: v :字面直接來寫墓毒;

字符串默認(rèn)不用加上單引號或者雙引號;

"" :雙引號亲怠;不會轉(zhuǎn)義字符串里面的特殊字符所计; 特殊字符會作為本身想表示的意思

name : "zhangsan \n lisi" :輸出 : zhangsan 換行 lisi

'' :單引號;會轉(zhuǎn)義特殊字符团秽,特殊字符最終只是一個普通的字符串?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ù)組(List踪栋、Set):

用- 值表示數(shù)組中的一個元素

pets:
    - cat
    - dog
    - pig

行內(nèi)寫法

pets: [cat,dog,pig]

3、配置文件值注入

配置文件

person:
    lastName: hello
    age: 18
    boss: false
    birth: 2017/12/12
    maps: {k1: v1,k2: v2}
    lists:
        - lisi
        - zhaoliu
    dog:
        name: 小狗
        age: 12

javaBean:

/**
 將配置文件中配置的每一個屬性的值图毕,映射到這個組件中
 @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定夷都; 
 prefix = "person" :配置文件中那個下面的所有屬性進(jìn)行一一映射
 
 只有這個組件是容器中的組件,才能容器提供的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;

我們可以導(dǎo)入配置文件處理器囤官,以后編寫配置就有提示了

<!--導(dǎo)入配置文件處理器冬阳,配置文件進(jìn)行綁定就會有提示-->  
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
</dependency>

3.1、properties配置文件在idea中默認(rèn)UTF-8可能會亂碼

調(diào)整 圖示:

3.2治拿、@Value獲取值和@ConfigurationProperties獲取值比較

@ConfigurationProperties @Value
功能 批量注入配置文件中的屬性 一個個指定
松散綁定(松散語法) 支持 不支持
SpEL 不支持 支持
JSR303數(shù)據(jù)校驗 支持 不支持
復(fù)雜類型封裝 支持 不支持

配置文件yml還是properties他們都能獲取到值摩泪;

如果說,我們只是在某個業(yè)務(wù)邏輯中需要獲取一下配置文件中的某項值劫谅,使用@Value

如果說见坑,我們專門編寫一個javaBean來和配置文件進(jìn)行映射,我們就直接使用@ConfigurationProperties

3.3捏检、配置文件注入值數(shù)據(jù)校驗

@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
    @Email
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;

3.4荞驴、@PropertySource,@Import,@Bean

@PropertySource:加載指定的配置文件

/**
將配置文件中配置的每一個屬性的值,映射到這個組件中
@ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定贯城;
prefix=“person”:配置文件中哪個下面的所有屬性進(jìn)行一一映射
@Component
只有這個組件是容器中的組件熊楼,才能容器提供的@ConfigurationProperties功能
@ConfigurationProperties(prefix="person")默認(rèn)從全局配置文件中獲取值
**/
@Component
@PropertySource(value = {"classpath:person.properties"})
@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;

@ImportResource:導(dǎo)入Spring的配置文件,讓配置文件里面的內(nèi)容生效

SpringBoot里面沒有Spring的配置文件能犯,我們自己編寫的配置文件鲫骗,也不能自動識別;

想讓Spring的配置文件生效踩晶,加載進(jìn)來执泰;@ImportResource標(biāo)注在一個配置類上

@ImportResource(locations={"classpath:beans.xml"})
導(dǎo)入Spring的配置文件讓其生效

不來編寫Spring的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="person" class="com.bwie.entity.Person">
        <property name="lastName" value="lisi"/>
    </bean>
</beans>

Spring Boot推薦給容器添加組件的方式;推薦全注解的方式

1渡蜻、配置類@Configuration------>Spring配置文件

2术吝、使用@Bean給容器中添加組件

@Configuration
public class MyAppConfig {
    //將方法的返回值 添加到容器中;容器中這個組件默認(rèn)的id就是方法名
    @Bean
    public Dog HelloDog(){
        return new Dog("旺財","拉布拉多");
    }

}

4茸苇、配置文件占位符

4.1排苍、隨機數(shù)

${random.value},${random.int},${random.long}
${random.int(10)},${random.int[1024,65536]}

4.2学密、占位符獲取之前配置的值淘衙,如果沒有可以使用:指定默認(rèn)值

person.lastName=zhangsan${random.uuid}
person.age=${random.int(10)}
person.boss=false
person.birth=2011/12/12
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.lastName:hello}_dog
person.dog.type=拉布拉多

5、profile

5.1则果、多profile文件

我們在主配置文件編寫的時候幔翰,文件名可以是application-{profile}.properties/yml

默認(rèn)使用application.properties的配置

5.2、yml支持多文檔塊方式

server:
  port: 8081
spring:
  profiles:
    active: prod
---
server:
  port: 8083
spring:
  profiles: dev

---
server:
  port: 8084
spring:
  profiles: prod
#person:

5.3西壮、激活指定profile

1遗增、在配置文件中指定spring.profiles.active=dev

2、在命令行:

java -jar spring-boot-02-config.jar --spring.profiles.active=dev;

可以直接在測試的時候款青,配置傳入命令行參數(shù)

3.虛擬機參數(shù)

-Dspring.profiles.active=dev

6做修、配置文件加載位置

springboot 啟動會掃描以下位置的application.properties或者application.yml文件作為Spring Boot的默認(rèn)配置文件

-file:./config/

-file:./

-classpath:/config/

-classpath:/

優(yōu)先級由高到低,高優(yōu)先級的配置會覆蓋低優(yōu)先級的配置

SpringBoot會從這四個位置加載主配置文件:互補配置

==我們還可以通過spring.config.location來改變默認(rèn)的配置文件位置==

項目打包好以后,我們可以使用命令行參數(shù)的形式饰及,啟動項目的時候來指定配置文件的新位置蔗坯;指定配置文件和默認(rèn)加載的這些配置文件共同起作用互補配置;

java -jar spring-boot-02-config.jar --spring.config.location=G:/application.properties

7燎含、外部配置加載順序

==SpringBoot也可以從以下位置加載配置宾濒;優(yōu)先級從高到低;高優(yōu)先級的配置低優(yōu)先級的配置屏箍,所有的配置會形成互補配置==

1.命令行參數(shù)

2.來自java:comp/env的JNDI屬性

3.java系統(tǒng)屬性

4.操作系統(tǒng)環(huán)境變量

5.RandomValuePropertySource配置的random.*屬性值

==有jar包外箱jar包內(nèi)進(jìn)行尋找==

==優(yōu)先加載帶profile==

6.jar包外部的application-{profile}.properties 或 application.yml(帶spring.profile)配置文件

7.jar包內(nèi)部的application-{profile}.properties 或 application.yml(帶spring.profile)配置文件

==再來加載不帶profile==

8.jar包外部的application.properties或者application.yml(不帶spring.profile)配置文件

9.jar包內(nèi)部的application.properties或者application.yml(不帶spring.profile)配置文件

精髓:

1》springboot啟動會加載大量的自動配置類

2》我們看我們需要的功能有沒有springboot默認(rèn)寫好的自動配置類

3》我們再來看這個自動配置類中到底配置了那些組件绘梦;(只要我們要用的組件有,我們就不需要再來配置了)

4》給容器中自動配置類添加組件的時候赴魁,會從properties類中獲取某些屬性卸奉,我們就可以在配置文件中指定這些屬性的值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市颖御,隨后出現(xiàn)的幾起案子榄棵,更是在濱河造成了極大的恐慌,老刑警劉巖潘拱,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疹鳄,死亡現(xiàn)場離奇詭異,居然都是意外死亡芦岂,警方通過查閱死者的電腦和手機尚辑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盔腔,“玉大人,你說我怎么就攤上這事月褥〕谒妫” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵宁赤,是天一觀的道長舀透。 經(jīng)常有香客問我,道長决左,這世上最難降的妖魔是什么愕够? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮佛猛,結(jié)果婚禮上惑芭,老公的妹妹穿的比我還像新娘。我一直安慰自己继找,他們只是感情好遂跟,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般幻锁。 火紅的嫁衣襯著肌膚如雪凯亮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天哄尔,我揣著相機與錄音假消,去河邊找鬼。 笑死岭接,一個胖子當(dāng)著我的面吹牛富拗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播亿傅,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼媒峡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了葵擎?” 一聲冷哼從身側(cè)響起谅阿,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酬滤,沒想到半個月后签餐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡盯串,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年氯檐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片体捏。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡冠摄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出几缭,到底是詐尸還是另有隱情河泳,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布年栓,位于F島的核電站拆挥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏某抓。R本人自食惡果不足惜纸兔,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望否副。 院中可真熱鬧汉矿,春花似錦、人聲如沸副编。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至呻待,卻和暖如春打月,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蚕捉。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工奏篙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人迫淹。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓秘通,卻偏偏與公主長得像,于是被迫代替她去往敵國和親敛熬。 傳聞我的和親對象是個殘疾皇子肺稀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容