How to implement Docker to dynamically pass parameters to Springboot projects

How to implement Docker to dynamically pass parameters to Springboot projects

background

Recently, some friends who are new to Docker asked me that they want to dynamically pass parameters to microservices through docker-compose.yml , instead of hard-coding them in the project configuration file every time, then building the service image, and finally packaging and publishing it through a series of processes to update the configuration. So, is it possible to directly put some configuration items into environment variables in docker-compose.yml , and then the springboot project automatically obtains parameters from the environment variables?

Scenario

Suppose there is a Springboot project with a database configuration item in it, but there are multiple database IPs in different database test environments (DEV\SIT\UAT). If you want to use the same Springboot project image, you can switch the database configuration at any time. In short, the database configuration of your Springboot application should be passed in externally instead of hardcoded.


There is a database configuration in the Springboot application as follows:

spring.datasource.url = jdbc:mysql://192.168.0.11:3306/db?useUnicode=true&characterEncoding=utf8
#Configure database username spring.datasource.username = sa
#Configure database password spring.datasource.password = sa

Solution

Use SpEL expressions to dynamically obtain database configuration from environment variables


Next, we replace the database configuration with a spEL expression in the Springboot configuration file

#Configure database link spring.datasource.url = jdbc:mysql://${DB_HOST}:${DB_PORT}/${DB_NAME}?useUnicode=true&characterEncoding=utf8
#Configure database username spring.datasource.username = ${DB_USER}
#Configure database password spring.datasource.password = ${DB_PASSWORD}

Configure our database parameters in 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

In this way, our Springboot application can dynamically obtain the database configuration when starting the container service

This is the end of this article about how Docker dynamically passes parameters to Springboot projects. For more information about Docker Springboot dynamic parameter passing, please search for previous articles on 123WORDPRESS.COM or continue to browse the following related articles. I hope you will support 123WORDPRESS.COM in the future!

You may also be interested in:
  • Implementation of spring boot front-end and back-end parameter transmission

<<:  Detailed explanation of MySQL data rows and row overflow mechanism

>>:  Four ways to modify the default CSS style of element-ui components in Vue

Recommend

css Get all elements starting from the nth one

The specific code is as follows: <div id="...

Detailed Analysis of or, in, union and Index Optimization in MySQL

This article originated from the homework assignm...

Linux lossless expansion method

Overview The cloud platform customer's server...

Nginx uses the Gzip algorithm to compress messages

What is HTTP Compression Sometimes, relatively la...

Detailed installation and configuration of Subversion (SVN) under Ubuntu

If you are a software developer, you must be fami...

Summary of commonly used performance test scripts for VPS servers

Here is a common one-click performance test scrip...

SELinux Getting Started

Back in the Kernel 2.6 era, a new security system...

Detailed explanation of using Vue.prototype in Vue

Table of contents 1. Basic Example 2. Set the sco...

Detailed example of MySQL data storage process parameters

There are three types of MySQL stored procedure p...

About the "occupational disease" of designers

I always feel that designers are the most sensiti...

Markup Languages ​​- What to learn after learning HTML?

Click here to return to the 123WORDPRESS.COM HTML ...

How to implement call, apply and bind in native js

1. Implement call step: Set the function as a pro...

How to use echarts to visualize components in Vue

echarts component official website address: https...