docker-compose 合理编排 springboot应用

1 如何将SpringBoot应用的配置文件挂到jar包外面

在 SpringBoot 应用中,可以将配置文件放在 jar 包外面,这样可以方便地修改配置而不需要重新打包和部署。

1.1 使用命令行参数

在启动应用程序时,可以使用--spring.config.location-Dspring.config.location命令行参数来指定配置文件的路径。

例如:(config 后面的 / 不可省略)

java -jar springboot-demo.jar --spring.config.location=/opt/servers/config/
1

补充:FHS(Filesystem Hierarchy Standard 文件系统层次化标准)将/opt定义为 “为安装附加应用软件包而保留”。所以这里选择/opt文件夹来存放应用程序的配置文件。

1.2 使用环境变量

可以设置SPRING_CONFIG_LOCATION环境变量来指定配置文件的路径。

如:

export SPRING_CONFIG_LOCATION=/opt/app/config/
java -jar springboot-demo.jar

1.3 使用外部配置文件

  • 方法一

在应用程序(jar包)启动命令执行目录下创建一个名为config的文件夹,然后将配置文件放在该文件夹中。

  • 方法二

在应用程序(jar包)同级目录下创建一个名为config的文件夹,然后将配置文件放在该文件夹中。在代码的配置文件application.propertiesapplication.yml中添加以下项:

spring.config.name=application
spring.config.location=classpath:/,file:./config/
  • 方法三

在应用程序(jar包)同级目录下直接放properties或yml配置文件。

  • 方法四

在应用程序(jar包)内部的classpath的同级目录下,创建config文件夹,然后放properties或yml配置文件。

  • 方法五

在应用程序(jar包)内部的classpath的同级目录下,然后直接放properties或yml配置文件。

注意:以上方法可以组合使用,例如,可以在命令行参数和环境变量中同时指定配置文件的路径,执行时命令行参数的优先级最高。

2 SpringBoot 配置文件生效的优先级排序

  • java -jar命令行中,通过--spring.config.location参数指定的方式优先级最高。

  • 设置SPRING_CONFIG_LOCATION环境变量来指定配置文件的路径是次优先级。

  • 在执行java -jar命令同级目录下的config文件夹是第三优先级。

注意:如果java -jar命令不是在项目jar包同级目录执行的话,在项目jar包同级目录下的 config 文件夹是不生效的。

  • 项目jar包中properties或yml文件中指定spring.config.location配置文件夹是第四优先级。

  • 项目jar包同级下直接放properties文件是第五优先级,直接把配置文件放到jar包的同级目录。

  • 项目内部的classpath同级config文件夹是第六优先级,在 classpath下建一个config文件夹,然后把配置文件放进去。

  • 项目内部的classpath同级放properties文件是最低优先级,是在classpath下直接放配置文件。

SpringBoot默认是优先读取java -jar命令同级目录下的一个config/application.properties文件的。

在项目内src/main/resources文件夹下创建的application.properties文件的优先级是最低的。

3. docker-compose 编排 springboot

3.1 安装docker-compose

  • 下载

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 授权

chmod +x /usr/local/bin/docker-compose

3.2 部署springboot应用

  • 创建目录

mkdir -p /opt/servers/config/
  • 上传jar包

cd /opt/servers/
rz springboot-demo-1.0.jar
  • 删除配置

cd /opt/servers/config/
rz application.yml
rz application-dev.yml
  • 新建Dockerfile文件

进入目录

cd /opt/servers/

Dockerfile文件内容

FROM openjdk:8-jre
RUN mkdir -p /opt/servers/config/
RUN echo 'Asia/Shanghai' >/etc/timezone
COPY ./springboot-demo-1.0.jar /app/springboot-demo-1.0.jar
ENV IS_MASTER true
ENTRYPOINT ["sh","-c","java -XX:+UseG1GC -Xms128M -Xmx512M -XX:SurvivorRatio=8 -Djava.security.egd=file:/dev/./urandom -jar /opt/servers/springboot-demo-1.0.jar --spring.config.location=/opt/servers/config/"]
  • 创建docker-compose.yml文件

进入目录

cd /opt/servers/

docker-compose.yml内容

version: "3"  
services:
  springboot_demo:
    build: .
    restart: unless-stopped
    environment:
       - SPRING_PROFILES_ACTIVE=dev
       - SERVER_PORT=8080
    volumes:
       - /home/log:/data/log
       - /opt/servers/config/:/opt/servers/config/
    ports:
      - 7082:7082
    container_name: springboot-demo
  • 启动脚本startup.sh

#!/bin/bash
docker-compose stop springboot_demo
docker-compose rm -f springboot_demo
docker rmi servers-springboot_demo
docker-compose up -d springboot_demo
  • 关闭脚本shutdown.sh

#!/bin/bash
docker-compose stop springboot_demo
docker-compose rm -f springboot_demo
docker rmi springboot_demo

springboot服务最终部署目录结构

[root@test-002 servers]# pwd
/opt/servers/
[root@test-002 servers]# tree
.
├── springboot-demo-1.0.jar
├── config
│   ├── application-dev.yml
│   └── application.yml
├── docker-compose.yml
├── Dockerfile
├── shutdown.sh
└── startup.sh
  • 查看日志

docker-compose logs -f
  • 进入容器内容

docker exec -it springboot-demo /bin/sh

0f6b8ed8d1b59df74c8ca21e6bdaf02c.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值