這篇文章將為大家詳細(xì)講解有關(guān)如何使用spring.profiles.active來(lái)分區(qū)配置,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)白山,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220
很多時(shí)候,我們項(xiàng)目在開(kāi)發(fā)環(huán)境和生成環(huán)境的環(huán)境配置是不一樣的,例如,數(shù)據(jù)庫(kù)配置,在開(kāi)發(fā)的時(shí)候,我們一般用測(cè)試數(shù)據(jù)庫(kù),而在生產(chǎn)環(huán)境的時(shí)候,我們是用正式的數(shù)據(jù),這時(shí)候,我們可以利用profile在不同的環(huán)境下配置用不同的配置文件或者不同的配置
spring boot允許你通過(guò)命名約定按照一定的格式(application-{profile}.properties)來(lái)定義多個(gè)配置文件,然后通過(guò)在application.properyies通過(guò)spring.profiles.active來(lái)具體激活一個(gè)或者多個(gè)配置文件,如果沒(méi)有沒(méi)有指定任何profile的配置文件的話,spring boot默認(rèn)會(huì)啟動(dòng)application-default.properties。
profile的配置文件可以按照application.properyies的放置位置一樣,放于以下四個(gè)位置,
1.當(dāng)前目錄的 “/config”的子目錄下
2.當(dāng)前目錄下
3.classpath根目錄的“/config”包下
4.classpath的根目錄下
在這里我們就定義倆個(gè)profile文件,application-cus1.properties和application-cus2.properties,并在倆個(gè)文件中都分別寫(xiě)上變量cusvar=cus1和cusvar=cus2
我們?cè)赼pplication.properyies也寫(xiě)上,并把profile切換到application-cus1.properties的配置文件
cusvar=cus3 spring.profiles.active=cus1
可以通過(guò)這樣子來(lái)測(cè)試
@RestController @RequestMapping("/task") public class TaskController { @RequestMapping(value = {"/",""}) public String hellTask(@Value("${cusvar}")String cusvar ){ return "hello task !! myage is " + cusvar; } }
在這里可以看到spring.profiles.active激活的profile不同,打印出來(lái)的結(jié)果也不一樣。
除了可以用profile的配置文件來(lái)分區(qū)配置我們的環(huán)境變量,在代碼里,我們還可以直接用@Profile注解來(lái)進(jìn)行配置,例如數(shù)據(jù)庫(kù)配置,這里我們先定義一個(gè)接口
public interface DBConnector { public void configure(); }
分別定義倆個(gè)實(shí)現(xiàn)類來(lái)實(shí)現(xiàn)它
/** * 測(cè)試數(shù)據(jù)庫(kù) */ @Component @Profile("testdb") public class TestDBConnector implements DBConnector { @Override public void configure() { System.out.println("testdb"); } } /** * 生產(chǎn)數(shù)據(jù)庫(kù) */ @Component @Profile("devdb") public class DevDBConnector implements DBConnector { @Override public void configure() { System.out.println("devdb"); } }
通過(guò)在配置文件激活具體使用哪個(gè)實(shí)現(xiàn)類
spring.profiles.active=testdb
然后就可以這么用了
@RestController @RequestMapping("/task") public class TaskController { @Autowired DBConnector connector ; @RequestMapping(value = {"/",""}) public String hellTask(){ connector.configure(); //最終打印testdb return "hello task !! myage is " + myage; } }
除了spring.profiles.active來(lái)激活一個(gè)或者多個(gè)profile之外,還可以用spring.profiles.include來(lái)疊加profile
spring.profiles: testdb spring.profiles.include: proddb,prodmq
以上就是spring boot用profile的作用
通過(guò)命令行設(shè)置屬性值
相信使用過(guò)一段時(shí)間Spring Boot的用戶,一定知道這條命令:java -jar xxx.jar --server.port=8888,通過(guò)使用--server.port屬性來(lái)設(shè)置xxx.jar應(yīng)用的端口為8888。
在命令行運(yùn)行時(shí),連續(xù)的兩個(gè)減號(hào)--就是對(duì)application.properties中的屬性值進(jìn)行賦值的標(biāo)識(shí)。所以,java -jar xxx.jar --server.port=8888命令,等價(jià)于我們?cè)赼pplication.properties中添加屬性server.port=8888,該設(shè)置在樣例工程中可見(jiàn),讀者可通過(guò)刪除該值或使用命令行來(lái)設(shè)置該值來(lái)驗(yàn)證。
通過(guò)命令行來(lái)修改屬性值固然提供了不錯(cuò)的便利性,但是通過(guò)命令行就能更改應(yīng)用運(yùn)行的參數(shù),那豈不是很不安全?是的,所以Spring Boot也貼心的提供了屏蔽命令行訪問(wèn)屬性的設(shè)置,只需要這句設(shè)置就能屏蔽:SpringApplication.setAddCommandLineProperties(false)。
多環(huán)境配置
以上都不是重點(diǎn),這才是重點(diǎn),這才是重點(diǎn),這才是重點(diǎn),重要的事情說(shuō)3遍。我們?cè)陂_(kāi)發(fā)Spring Boot應(yīng)用時(shí),通常同一套程序會(huì)被應(yīng)用和安裝到幾個(gè)不同的環(huán)境,比如:開(kāi)發(fā)、測(cè)試、生產(chǎn)等。其中每個(gè)環(huán)境的數(shù)據(jù)庫(kù)地址、服務(wù)器端口等等配置都會(huì)不同,如果在為不同環(huán)境打包時(shí)都要頻繁修改配置文件的話,那必將是個(gè)非常繁瑣且容易發(fā)生錯(cuò)誤的事。
對(duì)于多環(huán)境的配置,各種項(xiàng)目構(gòu)建工具或是框架的基本思路是一致的,通過(guò)配置多份不同環(huán)境的配置文件,再通過(guò)打包命令指定需要打包的內(nèi)容之后進(jìn)行區(qū)分打包,Spring Boot也不例外,或者說(shuō)更加簡(jiǎn)單。
在Spring Boot中多環(huán)境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對(duì)應(yīng)你的環(huán)境標(biāo)識(shí),比如:
application-dev.properties:開(kāi)發(fā)環(huán)境
application-test.properties:測(cè)試環(huán)境
application-prod.properties:生產(chǎn)環(huán)境
至于哪個(gè)具體的配置文件會(huì)被加載,需要在application.properties文件中通過(guò)spring.profiles.active屬性來(lái)設(shè)置,其值對(duì)應(yīng){profile}值。
如:spring.profiles.active=test就會(huì)加載application-test.properties配置文件內(nèi)容
下面,以不同環(huán)境配置不同的服務(wù)端口為例,進(jìn)行樣例實(shí)驗(yàn)。
針對(duì)各環(huán)境新建不同的配置文件application-dev.properties、application-test.properties、application-prod.properties
在這三個(gè)文件均都設(shè)置不同的server.port屬性,如:dev環(huán)境設(shè)置為8080,test環(huán)境設(shè)置為9090,prod環(huán)境設(shè)置為80
application.properties中設(shè)置spring.profiles.active=dev,就是說(shuō)默認(rèn)以dev環(huán)境設(shè)置
測(cè)試不同配置的加載:
執(zhí)行java -jar xxx.jar,可以觀察到服務(wù)端口被設(shè)置為8080,也就是默認(rèn)的開(kāi)發(fā)環(huán)境(dev)
執(zhí)行java -jar xxx.jar --spring.profiles.active=test,可以觀察到服務(wù)端口被設(shè)置為9090,也就是測(cè)試環(huán)境的配置(test)
執(zhí)行java -jar xxx.jar --spring.profiles.active=prod,可以觀察到服務(wù)端口被設(shè)置為80,也就是生產(chǎn)環(huán)境的配置(prod)
按照上面的實(shí)驗(yàn),可以如下總結(jié)多環(huán)境的配置思路:
application.properties中配置通用內(nèi)容,并設(shè)置spring.profiles.active=dev,以開(kāi)發(fā)環(huán)境為默認(rèn)配置
application-{profile}.properties中配置各個(gè)環(huán)境不同的內(nèi)容
通過(guò)命令行方式去激活不同環(huán)境的配置。
多環(huán)境高級(jí)應(yīng)用
在某些情況下,應(yīng)用的某些業(yè)務(wù)邏輯可能需要有不同的實(shí)現(xiàn)。例如郵件服務(wù),假設(shè)EmailService中包含的send(String email)方法向指定地址發(fā)送電子郵件,但是我們僅僅希望在生產(chǎn)環(huán)境中才執(zhí)行真正發(fā)送郵件的代碼,而開(kāi)發(fā)環(huán)境里則不發(fā)送以免向用戶發(fā)送無(wú)意義的垃圾郵件。
我們可以借助Spring的注解@Profile實(shí)現(xiàn)這樣的功能,這樣需要定義兩個(gè)實(shí)現(xiàn)EmailService借口的類:
/** * 發(fā)送郵件接口. */ public interface EmailService { /**發(fā)送郵件*/ publicvoid send(); } 發(fā)送郵件的具體實(shí)現(xiàn)(dev-開(kāi)發(fā)環(huán)境的代碼): @Service @Profile("dev") //開(kāi)發(fā)環(huán)境的時(shí)候. public class DevEmailServiceImpl implements EmailService{ @Override publicvoid send() { System.out.println("DevEmailServiceImpl.send().開(kāi)發(fā)環(huán)境不執(zhí)行郵件的發(fā)送."); } }
發(fā)送郵件的具體實(shí)現(xiàn)(prod-生產(chǎn)環(huán)境的代碼):
@Service @Profile("prod") //生產(chǎn)環(huán)境. public class ProdEmailServiceImpl2 implements EmailService{ @Override publicvoid send() { System.out.println("DevEmailServiceImpl.send().生產(chǎn)環(huán)境執(zhí)行郵件的發(fā)送."); //具體的郵件發(fā)送代碼. //mail.send(); } }
@Profile("dev")表明只有Spring定義的Profile為dev時(shí)才會(huì)實(shí)例化DevEmailService這個(gè)類。那么如何設(shè)置Profile呢?
在配置文件中指定
在application.properties中加入:
spring.profiles.active=dev
通過(guò)命令行參數(shù)
java -jar app.jar --spring.profiles.active=dev
關(guān)于“如何使用spring.profiles.active來(lái)分區(qū)配置”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
新聞標(biāo)題:如何使用spring.profiles.active來(lái)分區(qū)配置
文章網(wǎng)址:http://aaarwkj.com/article40/pdhheo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、App設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站內(nèi)鏈、移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)