JAVA yaml或properties配置文件中使用环境变量(docker部署)

当我们部署服务时候,希望yaml、properties中的一些配置参数(如数据库、端口号等)从外界获取而非写死。这样做的好处是,当你想部署在别的机器上就不需要再修改或者帮甲方上线的时候只需要修改环境变量就可以了。

Linux下添加环境变量很简单,无非是修改一些文件。

  1. 修改profile文件,输入vi/etc/profile 再结尾输入想添加的变量,如:export HOST=127.0.0.1
  2. 修改.bashrc文件,输入vi/root/.bashrc (profile与bashrc具体两者有什么区别可以查看看)
  3. 修改完后记得 输入source /root/.bashrc 立即生效

由于项目是由docker进行部署的,说说docker中如何添加环境变量

  • 在docker中,也能像Linux一样,进入容器中修改文件达到添加环境变量的效果。但是这样做有个弊端:如果项目频繁迭代,每一次部署都时候容器都被重新创建,被重新创建一次就需要再配置一遍,明显非常的费力,个人不推荐这种方法。
  • 接下来介绍三种添加docker环境变量的方法:
    1. 在Dockerfile文件中添加  ENV DB_HOST=127.0.0.1 DB_USER=root DB_PASSWORD=123456
    2. 在容器启动时添加(即docker run) docker run --name JAVATEST -d -p 8080:8080 --network host --env DB_HOST=127.0.0.1 --env DB_USER=root --env DB_PASSWORD=123456 镜像名
    3. 写在env.list文件中 docker run --name JAVATEST -d -p 8080:8080 --network host --env-file env.list 镜像名

env.list文件
SERVER_PORT=8080
DB_HOST=127.0.0.1
DB_USER=root
DB_PASSWORD=123456

yaml配置文件
url: jdbc:mysql://${DB_HOST:localhost}:3306/Test?serverTimezone=Asia/Shanghai&useSSL=false&useUnicode=true&characterEncoding=utf-8
    username: ${DB_USER}
    password: ${DB_PASSWORD}

${DB_HOST:localhost}表示为去DB_HOST的环境变量值,如果取不到则默认为localhost

<think>好的,用户想了解如何通过Docker部署Spring Boot应用,并使用YAML文件进行配置。首先,我需要回忆一下相关的知识。Docker部署Spring Boot应用通常需要创建一个Dockerfile,然后构建镜像并运行容器。而YAML配置文件可能指的是使用Docker Compose来定义服务配置。 用户提到使用YAML文件配置,所以应该涉及Docker Compose的docker-compose.yml文件。Spring Boot应用的配置通常有application.propertiesapplication.yml,但这里用户可能指的是Docker Compose的配置,所以需要明确区分。 首先,我需要确保Spring Boot应用已经配置好,比如使用MavenGradle构建,生成可执行的JAR文件。然后,编写Dockerfile,指定基础镜像,复制JAR文件,设置启动命令。接着,创建docker-compose.yml文件,定义服务、网络、卷等配置。 需要注意Dockerfile中的参数,比如暴露端口,以及可能的环境变量。在Docker Compose中,可以设置服务名称、镜像构建路径、端口映射、环境变量等。另外,可能需要连接数据库其他服务,比如Redis,这时在docker-compose.yml中需要定义多个服务,并确保它们之间的网络通信。 还需要检查用户提供的引用内容。引用[1]提到了Docker Compose的兼容性、配置文件参数和示例应用,引用[2]提到Spring Boot Starters,引用[4]是关于Docker网络和运行命令的。这些可以帮助构建Docker Compose配置,特别是网络设置和依赖服务。 可能的问题点:用户是否了解如何将Spring Boot的配置(如application.yml)与Docker Compose的环境变量结合使用?是否需要说明如何在Docker环境中覆盖配置?此外,是否需要考虑多阶段构建以优化镜像大小? 然后,步骤大致是:1. 创建Spring Boot项目并打包;2. 编写Dockerfile;3. 编写docker-compose.yml;4. 构建并启动服务。需要给出具体的代码示例,比如Dockerfile的内容,docker-compose.yml的结构,并解释关键参数,如volumes、ports、environment等。 还要注意是否需要处理配置文件挂载,例如将宿主机的application.yml挂载到容器中,者直接在Dockerfile中复制配置文件。不过通常Spring Boot的配置会打包在JAR内,但生产环境可能通过环境变量外部文件覆盖配置,这可能需要volumes映射。 最后,生成相关问题,例如如何优化Docker镜像大小,如何配置多环境,如何处理日志等。确保引用正确的参考来源,比如引用[1]中的docker-compose配置,引用[2]的Spring Boot Starters可能涉及依赖管理。</think>### 通过Docker部署Spring Boot应用并使用YAML配置 以下是分步指南,帮助您通过DockerYAML配置文件Docker Compose)部署Spring Boot应用: --- #### **1. 准备Spring Boot应用** 确保应用已生成可执行JAR包(通过MavenGradle构建): ```bash mvn clean package ``` 生成的JAR文件通常位于`target/`目录,例如`myapp-0.0.1-SNAPSHOT.jar`。 --- #### **2. 编写Dockerfile** 在项目根目录创建`Dockerfile`,内容如下: ```dockerfile # 使用OpenJDK作为基础镜像 FROM openjdk:17-jdk-slim # 设置工作目录 WORKDIR /app # 复制JAR文件到镜像中 COPY target/myapp-0.0.1-SNAPSHOT.jar app.jar # 暴露Spring Boot默认端口 EXPOSE 8080 # 启动应用 ENTRYPOINT ["java", "-jar", "app.jar"] ``` --- #### **3. 编写Docker Compose配置文件** 创建`docker-compose.yml`文件,定义服务、网络和配置: ```yaml version: '3.8' services: springboot-app: build: . # 使用当前目录的Dockerfile构建镜像 container_name: my-springboot-app ports: - "8080:8080" # 映射宿主机端口到容器端口 environment: - SPRING_PROFILES_ACTIVE=prod # 指定Spring Boot运行环境 networks: - app-network # 示例:添加Redis作为依赖服务(根据需求配置) redis: image: redis:alpine ports: - "6379:6379" networks: - app-network networks: app-network: driver: bridge ``` --- #### **4. 构建并启动服务** 运行以下命令启动容器: ```bash docker-compose up --build # 构建镜像并启动容器 ``` - 使用`-d`参数后台运行:`docker-compose up -d` - 停止服务:`docker-compose down` --- #### **5. 关键配置说明** 1. **多环境配置** 在`environment`中通过`SPRING_PROFILES_ACTIVE`指定环境,Spring Boot会自动加载对应的`application-prod.yml`配置文件[^2]。 2. **依赖服务集成** 若应用依赖数据库(如MySQL)缓存(如Redis),在`docker-compose.yml`中定义相关服务并配置连接信息[^1]。 3. **文件挂载** 挂载外部配置文件容器: ```yaml volumes: - ./config/application-prod.yml:/app/config/application.yml ``` --- #### **6. 验证部署** 访问`http://localhost:8080`确认应用运行状态,通过日志检查: ```bash docker logs my-springboot-app ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值