• 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编译命令覆盖默认环境配置,在项目目录执行命令如下:

    mvn package -P prod 
    

     执行结果如下:

    (4),执行docker编译

    启动docker结果如下:

    五,注意事项

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

  • 相关阅读:
    poi操作excel2007(读取、生成、编辑)
    poi API大全
    iText导出pdf、word、图片
    正则表达式判断是否是中国电信的号码
    正则表达式_判断金额是否为数字(且是2位有效数字)
    POI实现Excel2003插入多张图片
    java中BufferedReader 有什么用
    poi生成word2007及以上文件
    POI 详细介绍
    GDB之常见错误
  • 原文地址:https://www.cnblogs.com/ejiyuan/p/10362837.html
Copyright © 2020-2023  润新知