SpringBoot之多環(huán)境打包與配置文件排除方式
SpringBoot項(xiàng)目多環(huán)境打包與配置文件排除
在實(shí)際開發(fā)中,Spring Boot 項(xiàng)目通常需要適配不同的運(yùn)行環(huán)境,例如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境等。這些環(huán)境下的配置可能包含敏感信息,例如數(shù)據(jù)庫連接密碼、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)境配置,可以通過文件命名的方式區(qū)分環(huán)境,比如:
application-dev.yml:開發(fā)環(huán)境配置application-test.yml:測試環(huán)境配置application-prod.yml:生產(chǎn)環(huán)境配置
各環(huán)境配置文件可以定義不同的參數(shù)。例如,以下是開發(fā)和生產(chǎn)環(huán)境的數(shù)據(jù)庫配置:
開發(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_password2. 動(dòng)態(tài)切換環(huán)境
在 application.yml 中配置默認(rèn)激活的環(huán)境:
spring:
profiles:
active: dev通過命令行參數(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:通過 maven-resources-plugin
在 Maven 的 pom.xml 中,通過 maven-resources-plugin 在資源打包階段排除文件:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application-prod.yml</exclude>
<!-- 排查所有目錄下的所有配置文件 <exclude>**/*.*</exclude> -->
</excludes>
</resource>
</resources>
</build>方法 2:通過 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 文件中,可以通過 processResources 任務(wù)排除文件:
tasks.processResources {
exclude 'application-prod.yml'
}構(gòu)建時(shí)運(yùn)行:
./gradlew clean build
動(dòng)態(tài)加載外部配置文件
為了進(jìn)一步提高安全性,我們可以將敏感配置文件存儲(chǔ)在外部,并通過動(dòng)態(tài)加載的方式使用這些文件。
1. 存放外部配置文件
將敏感的配置文件(如 application-prod.yml)存放在服務(wù)器的安全路徑,例如 /etc/app-config/。
2. 啟動(dòng)時(shí)指定外部配置路徑
通過啟動(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:通過
maven-resources-plugin或maven-assembly-plugin排除敏感文件。 - Gradle:通過
processResources配置排除文件。
動(dòng)態(tài)加載外部配置:
- 將敏感文件存儲(chǔ)在外部路徑,通過啟動(dòng)參數(shù)、環(huán)境變量或額外路徑加載。
推薦實(shí)踐:
- 敏感信息外部化:避免將敏感信息打包到 JAR 中。
- 版本控制:將環(huán)境無關(guān)的公共配置納入版本管理,但排除敏感文件。
- 環(huán)境隔離:通過 CI/CD 流程在不同環(huán)境中自動(dòng)部署相應(yīng)的配置。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mybatis多個(gè)區(qū)間處理方式(雙foreach循環(huán))
這篇文章主要介紹了mybatis多個(gè)區(qū)間處理方式(雙foreach循環(huán)),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實(shí)現(xiàn)
這篇文章主要介紹了25行Java代碼將普通圖片轉(zhuǎn)換為字符畫圖片和文本的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
MyBatis-Plus實(shí)現(xiàn)連表查詢的方法實(shí)例
這篇文章主要給大家介紹了關(guān)于MyBatis-Plus實(shí)現(xiàn)連表查詢的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-01-01
SpringBoot加載多個(gè)配置文件實(shí)現(xiàn)dev、product多環(huán)境切換的方法
這篇文章主要介紹了SpringBoot加載多個(gè)配置文件實(shí)現(xiàn)dev、product多環(huán)境切換,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
4個(gè)Java8中你需要知道的函數(shù)式接口分享
Java?8?中提供了許多函數(shù)式接口,包括Function、Consumer、Supplier、Predicate?等等。本文主要來和大家介紹一下它們的具體使用,需要的可以參考一下2023-04-04
java算法實(shí)現(xiàn)預(yù)測雙色球中獎(jiǎng)號(hào)碼
這篇文章主要介紹了java算法實(shí)現(xiàn)預(yù)測雙色球中獎(jiǎng)號(hào)碼的相關(guān)資料,需要的朋友可以參考下2015-12-12
SpringBoot如何對密碼等敏感信息進(jìn)行脫敏處理
這篇文章主要為大家詳細(xì)介紹了SpringBoot對密碼等敏感信息進(jìn)行脫敏處理的幾個(gè)常用方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下2025-05-05
org.springframework.dao.OptimisticLockingFailureException樂觀鎖
本文主要介紹了org.springframework.dao.OptimisticLockingFailureException樂觀鎖失敗的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
Java 中HttpURLConnection附件上傳的實(shí)例詳解
這篇文章主要介紹了Java 中HttpURLConnection附件上傳的實(shí)例詳解的相關(guān)資料,希望通過本文大家能掌握這樣的知識(shí)內(nèi)容,需要的朋友可以參考下2017-09-09
springBoot解決static和@Component遇到的bug
這篇文章主要介紹了springBoot解決static和@Component遇到的bug,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02

