Docker如何给Springboot项目动态传参的实现方法
背景
最近有些初学Docker的朋友问到,想通过docker-compose.yml
来动态给微服务传参,而不是每次都要在项目配置文件硬编码,然后构建服务镜像,最后打包发布经过一些列流程才能更新配置,那能不能直接通过docker-compose.yml
里把一些配置项放到环境变量,然后springboot项目自动从环境变量获取参数呢?
场景
假设现在有一个Springboot项目,它里面有一个数据库的配置项,但是不同的数据库测试环境(DEV\SIT\UAT),数据库ip有多个,想使用同一个Springboot项目镜像,可以随时切换数据库配置,简单来说就是你的Springboot应用的数据库配置应该是通过外部传入,而不是hardcode.
Springboot应用里有个数据库配置如下:
spring.datasource.url = jdbc:mysql://192.168.0.11:3306/db?useUnicode=true&characterEncoding=utf8 #配置数据库用户名 spring.datasource.username = sa #配置数据库密码 spring.datasource.password = sa
解决方案
利用SpEL
表达式,动态从环境变量获取数据库配置
接下来我们在Springboot配置文件把数据库配置用spEL表达式替换
#配置数据库链接 spring.datasource.url = jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=utf8 #配置数据库用户名 spring.datasource.username = ${DB_USER} #配置数据库密码 spring.datasource.password = ${DB_PASSWORD}
在docker-compose.yml
配置我们的数据库参数
version: '3' services: web: restart: always depends_on: - db image: springboot-app-image build: . ports: - 8080:8080 environment: - DB_HOST=192.168.0.11 - DB_PORT=3306 - DB_USER=root - DB_PASSWORD=123456 - DB_NAME=db networks: - credit-facility-net deploy: mode: replicated replicas: 3 restart_policy: condition: on-failure delay: 5s max_attempts: 3 update_config: parallelism: 1 delay: 10s
这样我们的Springboot应用就可以在启动容器服务的时候动态获取数据库配置了
相关推荐
王道革 2020-11-25
bwyyziq 2020-11-22
pigsmall 2020-11-19
changecan 2020-11-19
helloWorldAndYou 2020-11-16
nginxs 2020-11-14
红石丶 2020-11-13
WanKaShing 2020-11-12
yangkang 2020-11-12
滴水穿石点石成金 2020-11-12
wuxunanjing 2020-11-11
魅惑青花瓷 2020-11-11
lihongtai 2020-11-09
yangkang 2020-11-09
worldsnow 2020-11-06
MichaelJScofield 2020-11-06
TaoTaoFu 2020-11-06
ppppfly 2020-10-23