??????點(diǎn)進(jìn)來(lái)你就是我的人了
博主主頁(yè):??????戳一戳,歡迎大佬指點(diǎn)!歡迎志同道合的朋友一起加油喔??????
目錄
1. Spring Boot 項(xiàng)目中配日文件的作用是什么
2. Spring Boot 配置文件的兩種格式
1. properties的語(yǔ)法
2. yml的語(yǔ)法
3. properties與yml的對(duì)比
4. 設(shè)置不同環(huán)境下的配置文件
3. 更多的系統(tǒng)配置項(xiàng)
1. Spring Boot 項(xiàng)目中配日文件的作用是什么
配置文件中最主要的兩個(gè)作用:?連接數(shù)據(jù)庫(kù)和用于定位問(wèn)題的關(guān)鍵日志.
- 一個(gè)項(xiàng)目中沒(méi)有數(shù)據(jù)庫(kù)的話(huà)那就談不上一個(gè)完整的項(xiàng)目.
- 假設(shè)你正在使用一個(gè)在線(xiàn)購(gòu)物網(wǎng)站。你在購(gòu)物車(chē)?yán)锓帕艘恍┫胭I(mǎi)的東西,準(zhǔn)備稍后結(jié)賬。但如果這個(gè)網(wǎng)站沒(méi)有數(shù)據(jù)庫(kù)來(lái)保存這些信息,你可能會(huì)發(fā)現(xiàn)當(dāng)你回來(lái)時(shí),購(gòu)物車(chē)?yán)锏奈锲范疾灰?jiàn)了。
- 另一方面,如果這個(gè)網(wǎng)站沒(méi)有配置文件,那么在出現(xiàn)問(wèn)題時(shí),開(kāi)發(fā)人員可能會(huì)很難找出問(wèn)題的原因。例如,如果支付系統(tǒng)突然出現(xiàn)故障,沒(méi)有配置文件的話(huà),可能就難以追蹤到具體出了什么問(wèn)題。
配置文件的作用:
- 連接數(shù)據(jù)庫(kù)的信息
- 用于發(fā)現(xiàn)和定位問(wèn)題的關(guān)鍵日志
- 設(shè)置項(xiàng)目的啟動(dòng)端口
- 第三方系統(tǒng)的調(diào)用密鑰等信息 (例如老師在某平臺(tái)給我們上課時(shí), 他能在平臺(tái)上拿到我們的數(shù)據(jù), 就是通過(guò)配置文件中設(shè)置的標(biāo)識(shí)來(lái)調(diào)用第三方接口獲取的)
2. Spring Boot 配置文件的兩種格式
Spring Boot 中有兩種格式的配置文件:
- properties? (application.properties) (Spring Boot項(xiàng)目創(chuàng)建時(shí)默認(rèn)的格式)
- yml / ymal (application.yml)
Spring Boot 中這兩種格式的配置文件的命名方式必須以 application 開(kāi)頭,? 否則配置就不會(huì)生效, 這就牽扯到了高級(jí)框架中的 "約定大于配置" , 我們要做的事情越來(lái)越少了, 但是要遵守的約定越來(lái)越多了.
【問(wèn)題】為什么需要兩種格式的配置文件呢 ? 僅僅是為了提供更多的選擇 ?
1. yml 相比于 properties 在寫(xiě)法上簡(jiǎn)化了許多 (后面會(huì)演示代碼)
2. 在跨平臺(tái)等問(wèn)題上也是有很大的優(yōu)勢(shì) (后面會(huì)講到)
【問(wèn)題】?jī)煞N格式的配置文件如果同時(shí)存在, 會(huì)以哪種格式為主?
1. 當(dāng)一個(gè)項(xiàng)目中出現(xiàn)了兩種格式的配置文件時(shí), properties 格式的配置文件優(yōu)先級(jí)高, 所以會(huì)以 properties 格式的配置文件為主. 例如?properties 配置文件中設(shè)置了端口為 8081, .yml 配置文件中也設(shè)置了端口, 為 8082, 那么最終程序啟動(dòng)時(shí)的端口就是 8081, 但是加載完 properties 文件之后, 也會(huì)加載 .yml 文件中的配置信息.
2.理論上是這兩種格式的配置文件可以出現(xiàn)在一個(gè)項(xiàng)目中, 但是一般都會(huì)統(tǒng)一配置文件,如果兩種格式都寫(xiě)了, 可能會(huì)有增加排查問(wèn)題的風(fēng)險(xiǎn);?就好比衣服種類(lèi)有很多, 但是一個(gè)餐廳里的服務(wù)員一般都會(huì)統(tǒng)一服裝,?否則會(huì)顯得雜亂無(wú)章, 不正式
1. properties的語(yǔ)法
properties以鍵值的形式配置,鍵和值中間用?=
?連接起來(lái)(key=value
),配置文件中的?#
?代表注釋信息
# 配置系統(tǒng)端口
server.port=8082
# 配置數(shù)據(jù)庫(kù)源
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/blog?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
這些配置都屬于系統(tǒng)配置項(xiàng)(給Spring框架用),用戶(hù)還可以自定義配置項(xiàng)(可在程序中用)
用戶(hù)自定義配置
# 自定義配置
name=張三
age=20
在程序中如何讀取自定義的配置項(xiàng)呢?
使用 @Value(“${ xxx }”) 的方式可讀取用戶(hù)自定義的配置
@Value("${name}")
private String name;
@Value("${age}")
private int age;
讀取的時(shí)候,自定義與系統(tǒng)的配置項(xiàng)都可以獲取到
【代碼實(shí)例】
@Controller
@ResponseBody //加在類(lèi)上, 表示當(dāng)前類(lèi)中的所有方法返回的都是非靜態(tài)頁(yè)面的數(shù)據(jù)
public class TestController {
//讀取用戶(hù)自定義的配置
//一定要是${key}格式
@Value("${name}")
private String name;
@Value("${age}") // 讀取用戶(hù)自定義的配置
private String age;
@Value("${server.port}") //讀取系統(tǒng)配置項(xiàng)
private int port;
@RequestMapping ("/sayHi") // = WebServlet("/URL")
public String sayHi() {
return "hello world " + "->" + name + age + " port = " + port;
}
}
瀏覽器輸入url(http://localhost:9090/sayHi)之后顯示結(jié)果如下:?
properties的優(yōu)缺點(diǎn)
- 優(yōu)點(diǎn):是系統(tǒng)的默認(rèn)的配置文件格式,優(yōu)先級(jí)更高
- 缺點(diǎn):寫(xiě)法比較冗余
2. yml的語(yǔ)法
yml是yaml的縮寫(xiě),它的語(yǔ)法格式為?key: value
,其中冒號(hào)為英文格式,并且value與冒號(hào)中間的空格不可省略
# 系統(tǒng)端口號(hào)
server:
port: 8083
# 數(shù)據(jù)庫(kù)源信息
spring:
datasource:
username: root
password: 123456
yml支持更多的數(shù)據(jù)類(lèi)型
# 字符串
str1: 你好 \n 你好
str2: '你好 \n 你好'
str3: "你好 \n 你好"
# 布爾值
flag1: true
flag2: false
# 整數(shù)
num: 10
# 浮點(diǎn)數(shù)
pai: 3.14
# null ~代表null
Node: ~
讀取的方式與properties格式相同,使用@Value("${ xxx }")
@Component
public class TestYml {
@Value("${str1}")
private String str1;
@Value("${str2}")
private String str2;
@Value("${str3}")
private String str3;
@Value("${num}")
private int num;
@Value("${flag1}")
private boolean flag1;
@Value("${flag2}")
private boolean flag2;
@Value("${pai}")
private double pai;
@Value("${node}")
private String node;
//該注解代表構(gòu)造方法,初始化bean的時(shí)候會(huì)調(diào)用該方法
@PostConstruct
public void construct(){
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
System.out.println(num);
System.out.println(pai);
System.out.println(flag1);
System.out.println(flag2);
System.out.println(node);
}
}
打印結(jié)果:
?從上述字符串的打印發(fā)現(xiàn):
- 字符串默認(rèn)可以不用加引號(hào)
- 加單引號(hào),會(huì)對(duì)特殊字符進(jìn)行轉(zhuǎn)義,也就是特殊字符也當(dāng)字符串對(duì)待了
- 加雙引號(hào),不會(huì)對(duì)特殊字符轉(zhuǎn)義,也就是特殊字符有自己的特殊含義,\n代表?yè)Q行
yml配置對(duì)象
# 對(duì)象
student1:
id: 1
name: 張三
age: 10
# 對(duì)象的行內(nèi)表示
student2: {id: 2,name: 李四, age: 15}
讀取對(duì)象使用?@ConfigurationProperties
?注解
@Component
@ConfigurationProperties("student1")//這里不需要使用$
@Getter
@Setter //這里是通過(guò)set方法賦值屬性的,提供set方法
@ToString
public class Student {
//字段與yml里的名稱(chēng)相同
private int id;
private String name;
private int age;
}
測(cè)試類(lèi):
@Controller
public class StudentController {
@Autowired
private Student student;
@PostConstruct
public void printStu(){
System.out.println(student);
}
}
打印結(jié)果:
yml配置list集合
# list集合
nametype:
name:
- 張三
- 李四
@Component
@ConfigurationProperties("nametype")
@Setter
@Getter
@ToString
public class TestList {
private List<String> name;
}
@Controller
public class ListController {
@Autowired
private TestList testList;
@PostConstruct
public void printList(){
System.out.println(testList);
}
}
打印結(jié)果:
yml的優(yōu)點(diǎn)
- 寫(xiě)法簡(jiǎn)單,易于理解
- 支持更多的數(shù)據(jù)類(lèi)型,如數(shù)組,對(duì)象等
- 支持更多的編程語(yǔ)言,Java,Python,Glang等
3. properties與yml的對(duì)比
- 格式不同,properties是以
key=value
的格式,yml是以key: value
的格式,并且層級(jí)之間使用換行縮進(jìn)方式配置,vlaue與:之間的空格不可省略 - properties配置存在冗余,yml很好的解決冗余問(wèn)題
- properties是項(xiàng)目默認(rèn)的配置文件格式,yml是后面新的一種配置格式
- yml的通用性更好,支持更多的語(yǔ)言
- yml支持更多的數(shù)據(jù)類(lèi)型
4. 設(shè)置不同環(huán)境下的配置文件
一般項(xiàng)目分為三個(gè)環(huán)境:
- 開(kāi)發(fā)環(huán)境
- 測(cè)試環(huán)境
- 上線(xiàn)運(yùn)行環(huán)境
???在實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,我們可能有測(cè)試環(huán)境、開(kāi)發(fā)環(huán)境、部署環(huán)境,這些環(huán)境下使用的數(shù)據(jù)庫(kù)連接或者項(xiàng)目啟動(dòng)的端口號(hào)可能都不太相同,只有一份配置文件,如果在不同的環(huán)境下運(yùn)行程序的話(huà)就需要我們頻繁地去修改配置文件,如果修改的配置項(xiàng)目少還好;如果多呢?不僅效率低,還可能出錯(cuò)。那么我們應(yīng)該怎么解決這種這種問(wèn)題呢?
環(huán)境不同可能配置項(xiàng)存在差異,如數(shù)據(jù)庫(kù)源,端口號(hào)不同等差異
我們可以使用如下配置文件的方式解決:
- 相同公共的配置放在application.yml(.properties)中
- 不同環(huán)境的配置文件放在application-xxx.yml(.properties)中(xxx可以為任意名字)
- 一般使用pro為線(xiàn)上環(huán)境,dev為開(kāi)發(fā)環(huán)境,test為測(cè)試環(huán)境
在公共的配置文件中(application.yml)添加如下配置項(xiàng):
# 設(shè)置配置文件的運(yùn)行平臺(tái)
spring:
profiles:
active: dev
示例:開(kāi)發(fā)環(huán)境端口要求4567,測(cè)試環(huán)境端口要求5678,線(xiàn)上環(huán)境端口要求1234
- 如果改變環(huán)境,只需要更改
主配置文件application.yml
中的配置項(xiàng)spring.profiles.active
即可 - active?后面寫(xiě) prod, test 和 dev, 就表示當(dāng)前主配置文件要搭配那個(gè)運(yùn)行環(huán)境來(lái)使用.
3. 更多的系統(tǒng)配置項(xiàng)
鏈接:?點(diǎn)擊獲取更多的系統(tǒng)配置項(xiàng)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-477213.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-477213.html
到了這里,關(guān)于詳解 Spring Boot 項(xiàng)目中的配置文件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!