spring boot profiles 实现多环境下配置切换 docker版

1,前言

    开发环境总需要调试,docker直接部署不需要调试,环境配置不一样,这里的目的只是,在docker文件环境与开发环境使用不同的配置文件,项目结构如下

   

2,设置项目配置文件

  默认配置文件 application.yml  

spring:
  profiles:
    active: ${spring.profiles.active}

这里有个占位符:${spring.profiles.active} 可以在pom.xml,dockerfile,或 maven(mvn package –P dev)编译时带入,当然也可直接写死 dev 或 prod等

 开发配置文件 application-dev.yml

# 开发配置
server:
  port: 8082

生成环境配置文件 application-prod.yml

# 生产配置
server:
  port: 8081

3,修改pom.xml文件

加入 profiles 环境配置,这里用于测试 在profiles 组中加入 dev,test ,prod 分别代表,开发,测试,生成三个环境的配置

复制代码
 <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <spring.profiles.active>dev</spring.profiles.active>
            </properties>
            <!--没有指定其他profile为激活状态时,该profile就默认会被激活-->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <spring.profiles.active>test</spring.profiles.active>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <spring.profiles.active>prod</spring.profiles.active>
            </properties>
        </profile>
    </profiles>
复制代码

 build 中加入一个plugin节点内容如下,主要是为了修改spring配置文件占位符(注意是添加不是修改)。

复制代码
<!-- 这个如果不配置,只能在application.yml中只能通过@...@带入,docker又无法通过@...@带入 -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <delimiters>
            <!-- 使用${..}作为占位符 -->
            <delimiter>${*}</delimiter>
        </delimiters>
        <!-- 同时还支持使用默认的占位符(@..@) -->
        <useDefaultDelimiters>true</useDefaultDelimiters>
    </configuration>
</plugin>
复制代码

 build 中加入一个plugin节点内容如下,这个主要用于docker 的编译

复制代码
<!-- Docker maven plugin -->
<plugin>
    <!-- https://mvnrepository.com/artifact/com.spotify/docker-maven-plugin -->
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.0</version>
    <configuration>
        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
        <dockerDirectory>src/main/docker</dockerDirectory>
        <resources>
            <resource>
                <targetPath>/</targetPath>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.war</include>
            </resource>
        </resources>
    </configuration>
</plugin>
<!-- Docker maven plugin -->
复制代码

3,创建一个Dockerfile文件

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD demo-docker-0.0.1-SNAPSHOT.war app.war
RUN sh -c 'touch /app.war'
RUN echo "Asia/Shanghai" > /etc/timezone
#这里prod代表生产环境
ENV spring.profiles.active="prod"
ENTRYPOINT ["java","-jar","/app.war"]

 文件内容这里不多做解释

4,测试

(1)直接在idea中启用调试

因为pom.xml的profiles节点中设置了“dev”为默认,所以这里,默认启用调试时,走的是“dev”

(2)设置Run/Debug configurations 的Active profiles = prod 覆盖 pom.xml默认配置dev为“prod”

运行结果如下:

发现这里已经修改为 prod

(3),使用marvn编译命令覆盖默认环境配置,在项目目录执行命令如下:

1
mvn package -P prod

 执行结果如下:

(4),执行docker编译

启动docker结果如下:

五,注意事项

1,application,Dokerfile,pom.xml 节点名称要一致“spring.profiles.active”

 

posted @   ejiyuan  阅读(3861)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2008-02-12 Visual Studio 2008正式版+sp1下载地址汇总及相关注册破解方法
点击右上角即可分享
微信分享提示