Spring Boot 项目的外部依赖配置如何进行容器化管理

一、场景介绍

  在项目开发过程中,我们会经常将一些固有的公共配置放到 bootstrap.properties 配置文件中,在使用传统的 jar 启动项目的过程中,直接将 bootstrap.properties 文件放置在与 jar 包同级目录,即可优先于 jar 内部配置文件的加载并且不可被覆盖。

  当以上场景将项目容器化以后,就成为了一个问题,因为容器是一个独立的个体,和操作系统本身运行是相互独立的。我们应该如何操作才能将 bootstrap.properties 在容器中跟在 jar 的同级目录到达一样的效果呢?

二、问题分析
  • 查看 Spring Boot 项目的加载配置文件的源码

    ConfigFileApplicationListener.java 可以看到,Spring Boot 在启动的过程中,加载配置文件的顺序表现如下:

    private static final String DEFAULT_SEARCH_LOCATIONS = "classpath:/,classpath:/config/,file:./,file:./config/";
    
  • 问题总结

    通过如上源码的分析,我们可以得出 Spring Boot 在启动的时候,会通过如上的顺序去加载配置文件,根据关键 file:./ 位置,我们是否可以在制作镜像的时候,将配置文件 COPY 到容器 jar 文件的同级目录呢?那么就看我们具体的实操吧。

三、实际操作
  1. 编写 Dockerfile

    FROM anapsix/alpine-java:8_server-jre_unlimited
    
    LABEL maintainer=Rambo
    
    ENV TZ=Asia/Shanghai
    
    RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
    
    # 在容器中创建文件夹
    RUN mkdir -p /rms-security-service
    
    # 切换到容器中的目录
    WORKDIR /rms-security-service
    
    # 将构建镜像上下文的 jar 复制到当前镜像
    COPY ./*.jar ./rms-security-service.jar
    
    # 将构建镜像上下文的 bootstrap.properties 配置文件复制到当前镜像并且和 jar 保持在同级目录
    COPY ./bootstrap.properties ./
    
    # 声明暴露端口
    EXPOSE 9001
    
    # 设置执行命令
    ENTRYPOINT ["java", "-jar", "./rms-security-service.jar"]
    
  2. 构建镜像

    docker build -t 192.169.5.207:8004/rms-platform/rms-security-service:1.0.0.1 .
    
  3. 执行测试

    docker run --rm -it -e "SPRING_PROFILES_ACTIVE=dev" 192.169.5.207:8004/rms-platform/rms-security-service:1.0.0.1
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值