企業(yè)網(wǎng)站建設(shè)多長(zhǎng)時(shí)間seo網(wǎng)站推廣專員招聘
此文章是根據(jù)黑馬程序員課程所做的筆記課程視頻
多環(huán)境開發(fā)
? 什么是多環(huán)境?其實(shí)就是說你的電腦上寫的程序最終要放到別人的服務(wù)器上去運(yùn)行。每個(gè)計(jì)算機(jī)環(huán)境不一樣,這就是多環(huán)境。常見的多環(huán)境開發(fā)主要兼顧3種環(huán)境設(shè)置,開發(fā)環(huán)境——自己用的,測(cè)試環(huán)境——自己公司用的,生產(chǎn)環(huán)境——甲方爸爸用的。因?yàn)檫@是絕對(duì)不同的三臺(tái)電腦,所以環(huán)境肯定有所不同,比如連接的數(shù)據(jù)庫不一樣,設(shè)置的訪問端口不一樣等等。
1.多環(huán)境開發(fā)(yaml單一文件版)
? 如下
spring:profiles:active: pro # 這里是指定啟動(dòng)的環(huán)境配置,啟動(dòng)pro
--- #環(huán)境與環(huán)境之間用———相隔
spring:profiles: pro #pro環(huán)境配置
server:port: 80
---
spring:profiles: dev #區(qū)分環(huán)境靠———和命名,此處就是命名
server:port: 81
? 就這么簡(jiǎn)單,再多來一組環(huán)境也OK
spring:profiles:active: pro # 啟動(dòng)pro
---
spring:profiles: pro
server:port: 80
---
spring:profiles: dev
server:port: 81
---
spring:profiles: test
server:port: 82
? 其中關(guān)于環(huán)境名稱定義上述格式是過時(shí)格式,標(biāo)準(zhǔn)格式如下
spring:config:activate:on-profile: pro
總結(jié)
- 多環(huán)境開發(fā)需要設(shè)置若干種常用環(huán)境,例如開發(fā)、生產(chǎn)、測(cè)試環(huán)境
- yaml格式中設(shè)置多環(huán)境使用—區(qū)分環(huán)境設(shè)置邊界
- 每種環(huán)境的區(qū)別在于加載的配置屬性不同
- 啟用某種環(huán)境時(shí)需要指定啟動(dòng)時(shí)使用該環(huán)境
2.多環(huán)境開發(fā)(yaml多文件版)
? 將所有的配置都放在一個(gè)配置文件中,尤其是每一個(gè)配置應(yīng)用場(chǎng)景都不一樣,這顯然不合理,于是就有了將一個(gè)配置文件拆分成多個(gè)配置文件的想法。拆分后,每個(gè)配置文件中寫自己的配置,主配置文件中寫清楚用哪一個(gè)配置文件就好了。
主配置文件
spring:profiles:active: pro # 啟動(dòng)pro
環(huán)境配置文件
server:port: 80
? 環(huán)境配置文件因?yàn)槊恳粋€(gè)都是配置自己的項(xiàng),所以連名字都不用寫里面了。那問題是如何區(qū)分這是哪一組配置呢?使用文件名區(qū)分。
application-pro.yaml
server:port: 80
application-dev.yaml
server:port: 81
? 文件的命名規(guī)則為:application-環(huán)境名.yml。
? 在配置文件中,如果某些配置項(xiàng)所有環(huán)境都一樣,可以將這些項(xiàng)寫入到主配置中,只有哪些有區(qū)別的項(xiàng)才寫入到環(huán)境配置文件中。
- 主配置文件中設(shè)置公共配置(全局)
- 環(huán)境分類配置文件中常用于設(shè)置沖突屬性(局部)
總結(jié)
-
可以使用獨(dú)立配置文件定義環(huán)境屬性
-
獨(dú)立配置文件便于線上系統(tǒng)維護(hù)更新并保障系統(tǒng)安全性
3.多環(huán)境開發(fā)(properties多文件版)
? SpringBoot最早期提供的配置文件格式是properties格式的,這種格式的多環(huán)境配置也了解一下吧。
主配置文件
spring.profiles.active=pro
環(huán)境配置文件
application-pro.properties
server.port=80
application-dev.properties
server.port=81
? 文件的命名規(guī)則為:application-環(huán)境名.properties。
總結(jié)
- properties文件多環(huán)境配置僅支持多文件格式
4.多環(huán)境開發(fā)獨(dú)立配置文件書寫技巧
? 作為程序員在搞配置的時(shí)候往往處于一種分久必合合久必分的局面。開始先寫一起,后來為了方便維護(hù)就拆分。對(duì)于多環(huán)境開發(fā)也是如此,下面給大家說一下如何基于多環(huán)境開發(fā)做配置獨(dú)立管理,務(wù)必掌握。
準(zhǔn)備工作
? 將所有的配置根據(jù)功能對(duì)配置文件中的信息進(jìn)行拆分,并制作成獨(dú)立的配置文件,命名規(guī)則如下
- application-devDB.yml
- application-devRedis.yml
- application-devMVC.yml
使用
? 使用include屬性在激活指定環(huán)境的情況下,同時(shí)對(duì)多個(gè)環(huán)境進(jìn)行加載使其生效,多個(gè)環(huán)境間使用逗號(hào)分隔
spring:profiles:active: devinclude: devDB,devRedis,devMVC
? 比較一下,現(xiàn)在相當(dāng)于加載dev配置時(shí),再加載對(duì)應(yīng)的3組配置,從結(jié)構(gòu)上就很清晰,用了什么,對(duì)應(yīng)的名稱是什么
注意
? 當(dāng)主環(huán)境dev與其他環(huán)境有相同屬性時(shí),主環(huán)境屬性生效;其他環(huán)境中有相同屬性時(shí),最后加載的環(huán)境屬性生效
改良
? 但是上面的設(shè)置也有一個(gè)問題,比如我要切換dev環(huán)境為pro時(shí),include也要修改。因?yàn)閕nclude屬性只能使用一次,這就比較麻煩了。SpringBoot從2.4版開始使用group屬性替代include屬性,降低了配置書寫量。簡(jiǎn)單說就是我先寫好,你愛用哪個(gè)用哪個(gè)。
spring:profiles:active: devgroup:"dev": devDB,devRedis,devMVC"pro": proDB,proRedis,proMVC"test": testDB,testRedis,testMVC
? 現(xiàn)在再來看,如果切換dev到pro,只需要改一下是不是就結(jié)束了?完美!
總結(jié)
- 多環(huán)境開發(fā)使用group屬性設(shè)置配置文件分組,便于線上維護(hù)管理
5.多環(huán)境開發(fā)控制
? 多環(huán)境開發(fā)到這里基本上說完了,最后說一個(gè)沖突問題。就是maven和SpringBoot同時(shí)設(shè)置多環(huán)境的話怎么搞。
? 要想處理這個(gè)沖突問題,你要先理清一個(gè)關(guān)系,究竟誰在多環(huán)境開發(fā)中其主導(dǎo)地位。也就是說如果現(xiàn)在都設(shè)置了多環(huán)境,誰的應(yīng)該是保留下來的,另一個(gè)應(yīng)該遵從相同的設(shè)置。
? maven是做什么的?項(xiàng)目構(gòu)建管理的,最終生成代碼包的,SpringBoot是干什么的?簡(jiǎn)化開發(fā)的。簡(jiǎn)化,又不是其主導(dǎo)作用。最終還是要靠maven來管理整個(gè)工程,所以SpringBoot應(yīng)該聽maven的。整個(gè)確認(rèn)后下面就好做了。大體思想如下:
- 先在maven環(huán)境中設(shè)置用什么具體的環(huán)境
- 在SpringBoot中讀取maven設(shè)置的環(huán)境即可
maven中設(shè)置多環(huán)境(使用屬性方式區(qū)分環(huán)境)
<profiles><profile><id>env_dev</id><properties><profile.active>dev</profile.active></properties><activation><activeByDefault>true</activeByDefault> <!--默認(rèn)啟動(dòng)環(huán)境--></activation></profile><profile><id>env_pro</id><properties><profile.active>pro</profile.active></properties></profile>
</profiles>
SpringBoot中讀取maven設(shè)置值
spring:profiles:active: @profile.active@
? 上面的@屬性名@就是讀取maven中配置的屬性值的語法格式。
總結(jié)
- 當(dāng)Maven與SpringBoot同時(shí)對(duì)多環(huán)境進(jìn)行控制時(shí),以Mavn為主,SpringBoot使用@…@占位符讀取Maven對(duì)應(yīng)的配置屬性值
- 基于SpringBoot讀取Maven配置屬性的前提下,如果在Idea下測(cè)試工程時(shí)pom.xml每次更新需要手動(dòng)compile方可生效