您当前的位置:首页 > 网站建设 > 网站维护
| php | asp | css | H5 | javascript | Mysql | Dreamweaver | Delphi | 网站维护 | 帝国cms | React | 考试系统 | ajax | jQuery |

Docker如何给Springboot项目动态传参的实现方法

51自学网 2022-07-04 11:37:43
  网站维护

背景

最近有些初学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应用就可以在启动容器服务的时候动态获取数据库配置了


下载地址:
详解SpringBoot项目docker环境运行时无限重启问题
利用 Docker 构建简单的 java 开发编译环境的方法详解
51自学网,即我要自学网,自学EXCEL、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。
京ICP备13026421号-1