zoukankan      html  css  js  c++  java
  • Docker如何给Springboot项目动态传参

    背景

    最近有些初学Docker的朋友问到,想通过docker-compose.yml来动态给微服务传参,而不是每次都要在项目配置文件硬编码,然后构建服务镜像,最后打包发布经过一些列流程才能更新配置,那能不能直接通过docker-compose.yml里把一些配置项放到环境变量,然后springboot项目自动从环境变量获取参数呢?


    场景

    假设现在有一个Springboot项目,它里面有一个数据库的配置项,但是不同的数据库测试环境(DEVSITUAT),数据库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应用就可以在启动容器服务的时候动态获取数据库配置了


    有兴趣的朋友,欢迎加我公众号一起交流,有问题可以留言,平时工作比较忙,我也抽时间尽量回复每位朋友的留言,谢谢!

  • 相关阅读:
    ASP.NET---创建自定义Web控件小结
    ASP.NET---使用Asp.NET开发三层架构的应用程序
    poj 1847 最短路简单题,dijkstra
    HDU 1102 最小生成树裸题,kruskal,prim
    poj 2239 二分图最大匹配,基础题(待补)
    HDU 1520 树形dp裸题
    HDU 2089 简单数位dp
    poj 3254 状压dp入门题
    HDU 1710 二叉树遍历,输入前、中序求后序
    Poj 3250 单调栈
  • 原文地址:https://www.cnblogs.com/evan-liang/p/12488207.html
Copyright © 2011-2022 走看看