SpringBoot多環(huán)境打包與配置文件排除實(shí)踐記錄
推薦閱讀:
SpringBoot 多環(huán)境打包最佳實(shí)踐記錄
Spring Boot 項(xiàng)目多環(huán)境打包與配置文件排除實(shí)踐
在實(shí)際開(kāi)發(fā)中,Spring Boot 項(xiàng)目通常需要適配不同的運(yùn)行環(huán)境,例如開(kāi)發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境等。這些環(huán)境下的配置可能包含敏感信息,例如數(shù)據(jù)庫(kù)連接密碼、API密鑰等。因此,在項(xiàng)目打包時(shí),我們不僅需要支持多環(huán)境配置,還要考慮如何排除敏感配置文件,以保證安全性。
多環(huán)境配置的實(shí)現(xiàn)方法打包時(shí)排除配置文件的方法動(dòng)態(tài)加載外部配置文件的最佳實(shí)踐
一、多環(huán)境配置的實(shí)現(xiàn)方法
1. 配置多環(huán)境文件
Spring Boot 默認(rèn)加載 application.properties
或 application.yml
配置文件。為了支持多環(huán)境配置,可以通過(guò)文件命名的方式區(qū)分環(huán)境,比如:
application-dev.yml
:開(kāi)發(fā)環(huán)境配置application-test.yml
:測(cè)試環(huán)境配置application-prod.yml
:生產(chǎn)環(huán)境配置
各環(huán)境配置文件可以定義不同的參數(shù)。例如,以下是開(kāi)發(fā)和生產(chǎn)環(huán)境的數(shù)據(jù)庫(kù)配置:
開(kāi)發(fā)環(huán)境:application-dev.yml
server: port: 8081 spring: datasource: url: jdbc:mysql://localhost:3306/dev_db username: dev_user password: dev_password
生產(chǎn)環(huán)境:application-prod.yml
server: port: 8080 spring: datasource: url: jdbc:mysql://prod-server:3306/prod_db username: prod_user password: prod_password
2. 動(dòng)態(tài)切換環(huán)境
在 application.yml
中配置默認(rèn)激活的環(huán)境:
spring: profiles: active: dev
通過(guò)命令行參數(shù)啟動(dòng)時(shí)動(dòng)態(tài)指定環(huán)境:
java -jar your-application.jar --spring.profiles.active=prod
二、打包時(shí)排除配置文件的方法
在某些情況下,敏感的配置文件(如 application-prod.yml
)可能包含生產(chǎn)環(huán)境的重要信息。我們希望這些文件在打包時(shí)被排除,而不是直接包含在最終的 JAR 包中。
1. 使用 Maven 排除配置文件
方法 1:通過(guò) maven-resources-plugin
在 Maven 的 pom.xml
中,通過(guò) maven-resources-plugin
在資源打包階段排除文件:
<build> <resources> <resource> <directory>src/main/resources</directory> <excludes> <exclude>application-prod.yml</exclude> <!-- 排查所有目錄下的所有配置文件 <exclude>**/*.*</exclude> --> </excludes> </resource> </resources> </build>
方法 2:通過(guò) maven-assembly-plugin
使用 maven-assembly-plugin
自定義打包配置:
添加插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor> </descriptors> </configuration> </plugin> </plugins> </build>
創(chuàng)建 assembly.xml
文件:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"> <id>jar-with-dependencies</id> <formats> <format>jar</format> </formats> <fileSets> <fileSet> <directory>${project.basedir}/src/main/resources</directory> <excludes> <exclude>application-prod.yml</exclude> </excludes> </fileSet> </fileSets> </assembly>
執(zhí)行構(gòu)建命令:
mvn clean package
2. 使用 Gradle 排除配置文件
在 Gradle 的 build.gradle
文件中,可以通過(guò) processResources
任務(wù)排除文件:
tasks.processResources { exclude 'application-prod.yml' }
構(gòu)建時(shí)運(yùn)行:
./gradlew clean build
三、動(dòng)態(tài)加載外部配置文件
為了進(jìn)一步提高安全性,我們可以將敏感配置文件存儲(chǔ)在外部,并通過(guò)動(dòng)態(tài)加載的方式使用這些文件。
1. 存放外部配置文件
將敏感的配置文件(如 application-prod.yml
)存放在服務(wù)器的安全路徑,例如 /etc/app-config/
。
2. 啟動(dòng)時(shí)指定外部配置路徑
通過(guò)啟動(dòng)參數(shù) --spring.config.location
指定外部配置文件的路徑:
java -jar your-application.jar --spring.config.location=/etc/app-config/application-prod.yml
3. 配置環(huán)境變量
將配置路徑指定為環(huán)境變量,啟動(dòng)時(shí)自動(dòng)加載:
export SPRING_CONFIG_LOCATION=/etc/app-config/ java -jar your-application.jar
4. 在配置文件中指定額外路徑
在主配置文件中,使用 spring.config.additional-location
指定額外的加載路徑:
spring: config: additional-location: file:/etc/app-config/application-prod.yml
四、總結(jié)
多環(huán)境配置
- 為不同的環(huán)境創(chuàng)建獨(dú)立的配置文件(
application-dev.yml
、application-prod.yml
)。 - 使用
spring.profiles.active
動(dòng)態(tài)切換環(huán)境。
配置文件排除
- Maven:通過(guò)
maven-resources-plugin
或maven-assembly-plugin
排除敏感文件。 - Gradle:通過(guò)
processResources
配置排除文件。
動(dòng)態(tài)加載外部配置
- 將敏感文件存儲(chǔ)在外部路徑,通過(guò)啟動(dòng)參數(shù)、環(huán)境變量或額外路徑加載。
推薦實(shí)踐
- 敏感信息外部化:避免將敏感信息打包到 JAR 中。
- 版本控制:將環(huán)境無(wú)關(guān)的公共配置納入版本管理,但排除敏感文件。
- 環(huán)境隔離:通過(guò) CI/CD 流程在不同環(huán)境中自動(dòng)部署相應(yīng)的配置。
到此這篇關(guān)于SpringBoot - 多環(huán)境打包與配置文件排除實(shí)踐的文章就介紹到這了,更多相關(guān)SpringBoot 多環(huán)境打包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot之自定義啟動(dòng)異常堆棧信息打印方式
這篇文章主要介紹了SpringBoot之自定義啟動(dòng)異常堆棧信息打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java中SynchronousQueue的底層實(shí)現(xiàn)原理剖析
BlockingQueue的實(shí)現(xiàn)類(lèi)中,有一種阻塞隊(duì)列比較特殊,就是SynchronousQueue(同步移交隊(duì)列),隊(duì)列長(zhǎng)度為0。本文就來(lái)剖析一下SynchronousQueue的底層實(shí)現(xiàn)原理,感興趣的可以了解一下2022-11-11詳解Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀
這篇文章主要介紹了Java的TCP/IP編程學(xué)習(xí)--基于定界符的成幀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04