SpringBoot工程Docker多环境中使用同一个Jar包解决方案
一、背景
SpringBoot工程Docker多环境中使用同一个Jar包解决方案
二、原因
- bootstrap.yml配置如下,通过勾选profiles选定环境
spring: profiles: profiles: @activeEnv@ # 固定的,和profiles里面的标签一致
--- # 本地开发环境,每个环境复制一份 spring: application: name: svr-job-mgt # 服务名,改成自己的 #其他配置信息 config: activate: on-profile: dev # 环境标识,照抄
- pom.xml配置如下,可以发现打包后会把resources下所有资源打进jar包
<resources> <resource> <!-- 指定配置文件的位置 --> <directory>src/main/resources</directory> <includes> <include>**/*</include> </includes> <!-- 开启替换标签,比如我们的'@env'就是通过这个替换的 --> <filtering>true</filtering> </resource> </resources>
<!--环境--> <profiles> <profile> <id>dev</id> <properties> <activeEnv>dev</activeEnv> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <profile> <id>prod</id> <properties> <activeEnv>prod</activeEnv> </properties> </profile> </profiles>
- 我们使用的打包命令为:
mvn package -Dmaven.test.skip=true -Pdev
-D表示跳过单元测试的运行,-P指定打包环境
这就会导致一个问题,当我们从dev环境增加prod环境时,我们就得需要从新build我们的jar包,但是我们发现所有的jar包下配置文件是一样,唯一不一样的参数为
spring.profiles.profiles变成了我们当前的环境参数。
二、思考
- spring.profiles.profiles参数如何匹配到各种环境
- 项目docker容器化部署,我们能不能通过环境变量传参数
- resource下的配置文件如何获取到我们的docker环境变量
三、解决
- 更改spring.profiles.profiles的值。key-value可自定义
spring: profiles: profiles: ${ACTIVE_ENV}
- k8s或者docker增加环境变量
env: - name: ACTIVE_ENV value: prod
后续,通过测试发现,无需1和2操作,直接增加环境变量即可
env: - name: spring.profiles.active value: prod
- 打包时候无需指定环境:
mvn package -Dmaven.test.skip=true
四、其他可优化的部分
- 由于现在账号密码都放在配置文件下,导致账号密码都在代码中(不安全),后续可参考如上设置配置到启动环境中。
- 现在还面临的一个问题是当前环境配置文件被修改,还需要从新打包。
解决问题2:我们可以利用springboot读取配置文件的优先级:jar包所在目录 > resource。其他路径可自行查阅。暂时想到两种解决方案,采用方案一。
方案一:将宿主机上的任意位置文件或者目录挂载到容器中
方案二:也可以利用docker cp命令把本地文件传入到运行的容器中,然后docker commit生成新的镜像
方案一示例:将本地目录/data下配置文件挂载到我们的容器中/app目录下,app目录为app.jar所在目录
docker run ... -v /data/application-pore.yml:/app/application-prod.yml ...
到此这篇关于SpringBoot工程Docker多环境中使用同一个Jar包解决方案的文章就介绍到这了,更多相关SpringBoot Docker使用Jar包内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Maven包冲突导致NoSuchMethodError错误的解决办法
web 项目 能正常编译,运行时也正常启动,但执行到需要调用 org.codehaus.jackson 包中的某个方法时,产生运行异常,这篇文章主要介绍了Maven包冲突导致NoSuchMethodError错误的解决办法,需要的朋友可以参考下2024-05-05Java中的NumberFormatException异常原因以及解决方案详解
这篇文章主要介绍了Java中的NumberFormatException异常原因以及解决方案详解,NumberFormatException 是 Java 中的一个异常类,通常在字符串转换为数字的过程中发生,它表示一个无效的数字格式,即字符串无法被正确解析为数字,需要的朋友可以参考下2024-02-02Java try()语句实现try-with-resources异常管理机制操作
这篇文章主要介绍了Java try()语句实现try-with-resources异常管理机制操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-09-09SpringBoot之如何搭建SpringBoot+Maven项目
这篇文章主要介绍了SpringBoot之如何搭建SpringBoot+Maven项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-07-07Spring BeanPostProcessor后处理器源码解析
这篇文章主要介绍了Spring BeanPostProcessor后处理器源码解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2023-09-09
最新评论