SpringBoot多环境打包与配置文件排除实践记录

 更新时间:2024年11月27日 11:37:54   作者:https://blog.csdn.net/yangshangwei/article/details/143924118  
本文介绍了SpringBoot项目多环境打包与配置文件排除实践,包括多环境配置的实现方法、打包时排除配置文件的方法以及动态加载外部配置文件的最佳实践,感兴趣的朋友跟随小编一起看看吧

推荐阅读:

SpringBoot 多环境打包最佳实践记录

Spring Boot 项目多环境打包与配置文件排除实践

在实际开发中,Spring Boot 项目通常需要适配不同的运行环境,例如开发环境、测试环境、生产环境等。这些环境下的配置可能包含敏感信息,例如数据库连接密码、API密钥等。因此,在项目打包时,我们不仅需要支持多环境配置,还要考虑如何排除敏感配置文件,以保证安全性。

多环境配置的实现方法打包时排除配置文件的方法动态加载外部配置文件的最佳实践

一、多环境配置的实现方法

1. 配置多环境文件

Spring Boot 默认加载 application.propertiesapplication.yml 配置文件。为了支持多环境配置,可以通过文件命名的方式区分环境,比如:

  • application-dev.yml:开发环境配置
  • application-test.yml:测试环境配置
  • application-prod.yml:生产环境配置

各环境配置文件可以定义不同的参数。例如,以下是开发和生产环境的数据库配置:

开发环境:application-dev.yml

server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dev_db
    username: dev_user
    password: dev_password

生产环境:application-prod.yml

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://prod-server:3306/prod_db
    username: prod_user
    password: prod_password

2. 动态切换环境

application.yml 中配置默认激活的环境:

spring:
  profiles:
    active: dev

通过命令行参数启动时动态指定环境:

java -jar your-application.jar --spring.profiles.active=prod

二、打包时排除配置文件的方法

在某些情况下,敏感的配置文件(如 application-prod.yml)可能包含生产环境的重要信息。我们希望这些文件在打包时被排除,而不是直接包含在最终的 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>

创建 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>

执行构建命令:

mvn clean package

2. 使用 Gradle 排除配置文件

在 Gradle 的 build.gradle 文件中,可以通过 processResources 任务排除文件:

tasks.processResources {
    exclude 'application-prod.yml'
}

构建时运行:

./gradlew clean build

三、动态加载外部配置文件

为了进一步提高安全性,我们可以将敏感配置文件存储在外部,并通过动态加载的方式使用这些文件。

1. 存放外部配置文件

将敏感的配置文件(如 application-prod.yml)存放在服务器的安全路径,例如 /etc/app-config/

2. 启动时指定外部配置路径

通过启动参数 --spring.config.location 指定外部配置文件的路径:

java -jar your-application.jar --spring.config.location=/etc/app-config/application-prod.yml

3. 配置环境变量

将配置路径指定为环境变量,启动时自动加载:

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

四、总结

多环境配置

  • 为不同的环境创建独立的配置文件(application-dev.ymlapplication-prod.yml)。
  • 使用 spring.profiles.active 动态切换环境。

配置文件排除

  • Maven:通过 maven-resources-pluginmaven-assembly-plugin 排除敏感文件。
  • Gradle:通过 processResources 配置排除文件。

动态加载外部配置

  • 将敏感文件存储在外部路径,通过启动参数、环境变量或额外路径加载。

推荐实践

  • 敏感信息外部化:避免将敏感信息打包到 JAR 中。
  • 版本控制:将环境无关的公共配置纳入版本管理,但排除敏感文件。
  • 环境隔离:通过 CI/CD 流程在不同环境中自动部署相应的配置。

到此这篇关于SpringBoot - 多环境打包与配置文件排除实践的文章就介绍到这了,更多相关SpringBoot 多环境打包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Springboot使用Redis实现定时任务的三种方式

    Springboot使用Redis实现定时任务的三种方式

    本文介绍了三种Redis定时任务实现方式,键空间通知,有序集合轮询,分布式锁,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • Mybatis-Plus实现只更新部分字段的数据

    Mybatis-Plus实现只更新部分字段的数据

    这篇文章主要介绍了Mybatis-Plus实现只更新部分字段的数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 一文彻底吃透SpringMVC中的转发和重定向

    一文彻底吃透SpringMVC中的转发和重定向

    大家应该都知道springmvc本来就会把返回的字符串作为视图名解析,然后转发到对应的视图,这篇文章主要给大家介绍了关于SpringMVC中转发和重定向的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • Java 在PDF中添加骑缝章示例解析

    Java 在PDF中添加骑缝章示例解析

    这篇文章主要介绍了Java 在PDF中添加骑缝章示例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 基于Spring-AOP实现自定义分片工具详解

    基于Spring-AOP实现自定义分片工具详解

    随着数据量的增长,在与其他系统交互时,批量接口会出现超时现象,发现原批量接口在实现时,没有做分片处理。由于与其他系统交互比较多,一个一个接口去做分片优化,改动量较大,所以考虑通过AOP解决此问题,感兴趣的可以了解一下
    2022-11-11
  • SpringBoot 创建对象常见的几种方式小结

    SpringBoot 创建对象常见的几种方式小结

    Spring Boot中创建对象的几种常见方式包括使用@Component、@Service、@Repository或@Controller注解,本文就来详细的介绍一下,感兴趣的可以了解一下
    2024-11-11
  • Java实现一个简单计算器

    Java实现一个简单计算器

    这篇文章主要介绍了Java实现一个简单计算器,文章我围绕实现简单计算器的相关代码展现全文,具有一定的参考价值,需要的小伙伴可以参考一下,
    2022-01-01
  • java中比较2个Date是不是同一天的五种实现方法与对比

    java中比较2个Date是不是同一天的五种实现方法与对比

    这篇文章主要为大家详细介绍了java中比较2个Date是不是同一天的五种实现方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
    2026-01-01
  • SpringBoot实现Excel文件批量上传导入数据库

    SpringBoot实现Excel文件批量上传导入数据库

    这篇文章主要为大家详细介绍了SpringBoot实现Excel文件批量上传导入数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • SpringBoot配置Apollo代码实例

    SpringBoot配置Apollo代码实例

    这篇文章主要介绍了SpringBoot配置Apollo代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10

最新评论