玩转springboot:配置文件详细讲解
一、配置文件
SpringBoot使用一個(gè)全局的配置文件,配置文件名是固定的
- application.properties
- application.yml
配置文件的作用:修改SpringBoot自動(dòng)配置的默認(rèn)值;SpringBoot在底層都給我們自動(dòng)配置好;
YAML(YAML Ain’t Markup Language)
YAML是“YAML不是一種標(biāo)記語言”的外語縮寫 [1] (見前方參考資料原文內(nèi)容);但為了強(qiáng)調(diào)這種語言以數(shù)據(jù)做為中心,而不是以置標(biāo)語言為重點(diǎn),而用返璞詞重新命名。它是一種直觀的能夠被電腦識(shí)別的數(shù)據(jù)序列化格式,是一個(gè)可讀性高并且容易被人類閱讀,容易和腳本語言交互,用來表達(dá)資料序列的編程語言。
標(biāo)記語言:
以前的配置文件;大多都使用的是 xxxx.xml文件;
YAML:以數(shù)據(jù)為中心,比json、xml等更適合做配置文件;
YAML:配置例子
server:port: 8080如果是xml:
<server><port>8080</port> </server>二、YAML語法介紹
1、基本語法
**k:(空格)v:**表示一對(duì)鍵值對(duì)(空格必須有)
以空格的縮進(jìn)來控制層級(jí)關(guān)系;只要是左對(duì)齊的一列數(shù)據(jù),都是同一個(gè)層級(jí)的
server:port: 8080path: /hello屬性和值也是大小寫敏感;
2、值的寫法
字面量:普通的值(數(shù)字,字符串,布爾)
k: v:字面直接來寫;
字符串默認(rèn)不用加上單引號(hào)或者雙引號(hào);
"":雙引號(hào):不會(huì)轉(zhuǎn)義字符串里面的特殊字符;特殊字符會(huì)作為本身想表示的意思
name: "sihai\n lisi"輸出: sihai換行 lisi
’’:單引號(hào):會(huì)轉(zhuǎn)義特殊字符,特殊字符最終只是一個(gè)普通的字符串?dāng)?shù)據(jù)
name: ‘sihai\n lisi’:輸出;sihai\n lisi對(duì)象、Map(屬性和值)(鍵值對(duì))
**k: v:**在下一行來寫對(duì)象的屬性和值的關(guān)系;注意縮進(jìn)
對(duì)象還是k: v的方式
行內(nèi)寫法:
user: {name: sihai, age: 18}數(shù)組(List、Set)
用**-** 值表示數(shù)組中的一個(gè)元素
pets: - cat - dog - pig行內(nèi)寫法:
pets: [cat,dog,pig]三、配置文件值注入
配置文件
user:name: sihaiage: 20lists:- lisi- zhangsanpig:name: 小豬age: 10在javabean中的使用:
/** * 將配置文件中配置的每一個(gè)屬性的值,映射到這個(gè)組件中 * * @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定; * * prefix = "person":配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射 * * 只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能; * */ @Component @ConfigurationProperties(prefix = "user") public class User{private String name;private int age;private List<Object> lists;private Pig pig; }另外,我們可以導(dǎo)入配置文件處理器,以后編寫配置就有提示了。
<!‐‐導(dǎo)入配置文件處理器,配置文件進(jìn)行綁定就會(huì)有提示‐‐> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional> </dependency>1、properties配置文件在idea中默認(rèn)utf-8亂碼解決
2、@Value獲取值和@ConfigurationProperties獲取值比較
| 功能 | 批量注入配置文件中的屬性 |
| 松散綁定(松散語法) | 支持 |
| SpEL | 不支持 |
| JSR303數(shù)據(jù)校驗(yàn) | 支持 |
| 復(fù)雜類型封裝 | 支持 不支持 |
到底如何在哪個(gè)場(chǎng)景使用這兩個(gè)獲取配置文件的值呢?
如果說,我們只是在某個(gè)業(yè)務(wù)邏輯中需要獲取一下配置文件中的某項(xiàng)值,使用@Value;
如果說,我們專門編寫了一個(gè)javaBean來和配置文件進(jìn)行映射,我們就直接使用@ConfigurationProperties;
3、配置文件注入值數(shù)據(jù)校驗(yàn)
@Component @ConfigurationProperties(prefix = "user") public class User{//使用value獲取一個(gè)值@Value("${user.name}")private String name;private int age;private List<Object> lists;private Pig pig; }4、@PropertySource&@ImportResource&@Bean
@PropertySource:加載指定的配置文件
/** * 將配置文件中配置的每一個(gè)屬性的值,映射到這個(gè)組件中 * @ConfigurationProperties:告訴SpringBoot將本類中的所有屬性和配置文件中相關(guān)的配置進(jìn)行綁定; * prefix = "person":配置文件中哪個(gè)下面的所有屬性進(jìn)行一一映射 * * 只有這個(gè)組件是容器中的組件,才能容器提供的@ConfigurationProperties功能; * @ConfigurationProperties(prefix = "person")默認(rèn)從全局配置文件中獲取值; * */ @PropertySource(value = {"classpath:user.properties"}) @Component @ConfigurationProperties(prefix = "user") public class User{//使用value獲取一個(gè)值@Value("${user.name}")private String name;private int age;private List<Object> lists;private Pig pig; }@ImportResource:導(dǎo)入Spring的配置文件,讓配置文件里面的內(nèi)容生效
Spring Boot里面沒有Spring的配置文件,我們自己編寫的配置文件,也不能自動(dòng)識(shí)別;
想讓Spring的配置文件生效,加載進(jìn)來;@ImportResource標(biāo)注在一個(gè)配置類上
由于springboot推薦使用全注解的方式,所以我們可以使用全注解的方式來改造以前的bean 的配置方式
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="helloService" class="com.sihai.springboot.service.HelloService"></bean> </beans>springboot全注解方式:
1、配置類@Configuration對(duì)應(yīng)Spring配置文件
2、使用@Bean給容器中添加組件
/** * @Configuration:指明當(dāng)前類是一個(gè)配置類;就是來替代之前的Spring配置文件 * * 在配置文件中用<bean><bean/>標(biāo)簽添加組件 * */ @Configuration public class MyAppConfig {//將方法的返回值添加到容器中;容器中這個(gè)組件默認(rèn)的id就是方法名@Beanpublic HelloService helloService(){System.out.println("配置類@Bean給容器中添加組件了...");return new HelloService();} }四、profile講解
1、多Profile文件
我們?cè)谥髋渲梦募帉懙臅r(shí)候,文件名可以是 application-{profile}.properties/yml
默認(rèn)使用application.properties的配置。
2、yml支持多文檔塊方式
server:port: 8080 spring:profiles:active: prod ‐‐‐ server:port: 8083 spring:profiles: dev ‐‐‐ server:port: 8084 spring:profiles: prod #指定屬于哪個(gè)環(huán)境3、激活指定profile
有一下幾種方式:
1、在配置文件中指定
spring.profiles.active=dev2、命令行:
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總結(jié)
以上是生活随笔為你收集整理的玩转springboot:配置文件详细讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩转springboot:入门程序
- 下一篇: 玩转springboot:日志的使用