Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Springboot与Maven多环境配置文件夹解决方案

Springboot与Maven多环境配置文件夹解决方案

作者头像
海向
发布于 2020-03-11 08:10:41
发布于 2020-03-11 08:10:41
1.9K00
代码可运行
举报
文章被收录于专栏:海向海向
运行总次数:0
代码可运行

?原文地址为https://cloud.tencent.com/developer/article/1597095,转载请注明出处!

Profile用法

我们在application.yml中为jdbc.username赋予一个值,这个值为一个变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jdbc:
  username: ${jdbc.username}

Maven中的profiles可以设置多个环境,当我们选择a环境后,<jdbc.username>内的值将替换上述配置文件中的变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    </profiles>
        <profile>
            <id>a</id>
            <properties>
                <jdbc.username>root</jdbc.username>
            </properties>
            <!-- 默认使用此环境 -->
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>

我们查看编译后的application.yml文件,果然变量已经被赋值。我们猜想是否可以利用Profile的这一特性设置开发、测试、生产环境,选择不同环境时使用不同变量,配合Resources和Filter来指定打包内容以及替换变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
jdbc:
  username: root

resources

用来操作编译文件

filters

过滤器,设置过滤器的资源将会对同名变量进行赋值(被赋值的资源文件需要设置filtering为true)

多环境配置解决方案

网上大多数都是分为application-dev.xml、application-test.xml、application-prod.xml三个文件,可是我们在真实项目开发中,将会用到很多各式各样的文件(例如log4j的配置文件),它们在不同环境中应该也是不同的配置,不能在测试和生产环境使用同一个配置文件。所以我们将分为三个文件夹分别代表开发环境、测试环境、生产环境,他们里面的配置文件种类一致但是内容不一样。选择完当前环境后,打的jar包只包含当前环境文件夹下的配置文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
├─main
│  ├─java
│  │  └─......
│  └─resources
│      ├─dev
│      │   └─config
│      │   │   └─mq.yml
│      │   │   └─redis.yml
│      │   └─application-dev.yml
│      ├─prod
│      │  └─config
│      │  │    └─mq.yml
│      │  │    └─redis.yml
│      │  └─application-prod.yml
│      └─test
│      │  └─config
│      │  │    └─mq.yml
│      │  │    └─redis.yml
│      │  └─application-test.yml
│      └─application.yml
│      └─a.xml
└─test
    └─java
        └─......

dev下的config下的mq.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mq: mq-dev

dev下的config下的redis.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
redis: redis-dev

dev下的application-dev.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
profiles.active:
  dev
port: dev-port

application.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  profiles:
    active: ${profiles.active}

port: ${port}

查看编译后的结果

其中application.yml中变量已经被替换为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  profiles:
    active: dev
port: dev-port

完整的pom.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.1.0</version>
                <!--使用默认的变量分割符即${}-->
                <configuration>
                    <useDefaultDelimiters>true</useDefaultDelimiters>
                </configuration>
            </plugin>
        </plugins>

        <!-- 测试文件的编译路径设置 -->
        <testResources>
            <testResource>
                <!--这里是关键! 根据不同的环境,把对应文件夹里的配置文件打包-->
                <directory>src/main/resources</directory>
                <includes>
                    <include>application.yml</include>
                </includes>
                <filtering>true</filtering>
            </testResource>

            <testResource>
                <!--这里是关键! 根据不同的环境,把对应文件夹里的配置文件打包-->
                <directory>src/main/resources/${profiles.active}</directory>
                <includes>
                    <include>**/*.yml</include>
                </includes>
                <filtering>false</filtering>
            </testResource>
        </testResources>

        <resources>
            <resource>
                <!--打包该目录下的 application.yml -->
                <directory>src/main/resources</directory>
                <includes>
                    <include>application.yml</include>
                </includes>
                <!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <!-- ${profiles.active}由profile提供 -->
                <directory>src/main/resources/${profiles.active}</directory>
                <includes>
                    <include>**/*.yml</include>
                </includes>
                <filtering>false</filtering>
            </resource>

        </resources>

        <!-- 定义 filter,即该资源中的值将会用来替换同名属性(设置 filtering 为 true 的资源中的属性)-->
        <filters>
          <filter>
              src/main/resources/${profiles.active}/application-${profiles.active}.yml
          </filter>
        </filters>
    </build>

    <profiles>
        <profile>
            <!-- 本地开发环境 -->
            <id>dev</id>
            <properties>
                <profiles.active>dev</profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>

        </profile>

        <profile>
            <!-- 测试环境 -->
            <id>test</id>
            <properties>
                <profiles.active>test</profiles.active>
            </properties>
        </profile>

        <profile>
            <!-- 生产环境 -->
            <id>prod</id>
            <properties>
                <profiles.active>prod</profiles.active>
            </properties>
        </profile>
    </profiles>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring boot使用Maven Profile配合Spring Profile进行多环境配置和打包
但是用了Maven Profile之后,我打包就不用每次都改application.yml文件了
ydymz
2021/01/05
3.3K1
Spring boot使用Maven Profile配合Spring Profile进行多环境配置和打包
SpringBoot多文件配置根据环境加载不同配置
在平时开发时,会发现公司的项目会不同的环境使用到不同的配置。如本地,测试,预发布,发布等环境,像数据库这些都要使用到不同的配置。如果只有一个配置文件,发布到不同环境的时候都要去修改一遍那简直就是遭罪,那么,如何实现SpringBoot根据需要去加载不同的配置文件?
青衫染红尘
2021/01/19
2.2K0
SpringBoot多文件配置根据环境加载不同配置
SpringBoot 多环境打包配置
实际开发中,应用程序通常需要部署到不同的运行环境中,例如 开发环境、测试环境、生产环境等。
默存
2023/11/20
9650
SpringBoot 多环境打包配置
Maven 打包实现生产环境与测试环境配置分离
在使用maven的过程中会发现一个问题,由于生产环境跟测试环境的配置不通,所以在分别打两个环境的包时,往往需要人工参与去修改配置文件,而人工参与的次数越大错误的几率就会越大,那maven能不能再不用人工修改配置文件的前提下来分别打两个环境的包呢,当然可以。
shengjk1
2018/10/24
1.4K0
Spring Boot系列之-profile
Spring Boot profile用于分离不同环境的参数配置,通过spring.profile.active参数设置使用指定的profile。
编程随笔
2019/09/11
7440
Maven 利用 profile 进行多环境配置
我们在进行项目的多环境配置时,有很多种方式供我们选择,比如 SpringBoot 自带的 application-dev.yml、maven 的 profile 等。这里介绍的就是如何利用 profile 进行多环境配置。
JMCui
2019/11/26
9740
Maven 利用 profile 进行多环境配置
原来实现项目多环境打包部署是如此的简单
   在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境、测试团队的测试环境、生产仿真环境、正式生产环境,不同的公司可能还会有更多的环境需要对项目配置进行动态切换。项目在这些环境切换的过程中,往往会有一部分配置是所有的环境都相同的,还有一部分是不同环境都不相同的(最典型的就是数据连接配置文件jdbc.properties),如果我们不做特殊配置,那么我们就需要根据环境来修改配置文件,不同环境来回修改和切换,不仅容易出错,而且很繁琐,那么这时候我们在想:有没有办法可以能够让我们不用修改配置就能发布到不同的环境中呢?答案显而易见,那么本文我们就通过三种方式来解决这个问题。从而把我们的软件的可移植性提高一个层次。
阿豪聊干货
2018/08/09
1.4K0
聊聊基于maven的springboot的“过时”用法
接触过许多工程,发现有一些基于maven的springboot工程还是使用maven的profile,有些"过时"了,下面简单介绍一下。
code4it
2023/09/17
2750
SpringBoot 多环境设置 active: @profileActive@
本文最后更新于 2022年12月13日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
仙士可
2023/02/01
2.7K0
SpringBoot 多环境设置 active: @profileActive@
maven多环境配置文件
pom文件 <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <environment>dev</environment><!-- 节点名字environment是自己随意取的 --> </properties>
东营浪人
2019/09/05
1.1K0
Maven构建配置和激活SpringBoot配置文件
本文最后更新于 511 天前,其中的信息可能已经有所发展或是发生改变。 一、Maven配置里使用SpringBoot配置里的属性 <resource> <directory>src/main/resources/${profiles.active}</directory> <filtering>true</filtering> <includes>
Yuyy
2022/09/21
1.2K0
Maven多环境配置
多数项目都会有开发环境、测试环境、生产环境,各个环境配置可能都会不一样,于是在构建时,会涉及到环境配置的切换。来回手工修改配置,效率低下,容易出错。可以配置多个含有不同环境配置的Profile,在构建时指定构建环境,达到多环境下快速灵活构建的目的。
布禾
2020/10/29
5320
Maven多环境配置
嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?
日常开发中至少有三个环境,分别是开发环境(dev),测试环境(test),生产环境(prod)。
huofo
2022/03/16
2K0
嗯,挺全乎儿的,Spring Boot 多环境配置都在这里了,你喜欢哪种?
springboot分环境配置文件
这里只是为了演示,具体几个配置文件还得根据需求来,有的还有什么UAT环境、灰度环境等,不过没什么,无非就是再添加配置文件和相应pom文件调整一下罢了。另外application.properties中最好放置一些不会改变的配置项,比如说端口。
田维常
2019/07/30
9170
springboot分环境配置文件
Spring Boot(03):Spring Boot多环境配置,如何轻松实现开发、测试、生产环境切换?
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
bug菌
2023/09/04
1.8K0
Spring Boot(03):Spring Boot多环境配置,如何轻松实现开发、测试、生产环境切换?
Maven系列第9篇:多环境构建,作为核心开发,这个玩不转有点说不过去!
整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部有maven完整系列的连接。
路人甲Java
2019/11/29
1.2K0
Maven系列第9篇:多环境构建,作为核心开发,这个玩不转有点说不过去!
Maven根据Profiled读取不同配置文件
在日常开发中,我们大多都会有开发环境(dev)、测试环境(test)、生产环境(prod),不同环境的参数肯定不一样,我们需要在打包的时候,不同环境打不同当包,如果手动改,一方面效率低,容易出错,而且每次打包都改动,非常麻烦,所以Maven给我们提供了profile的配置。
全栈程序员站长
2022/08/13
5790
Maven根据Profiled读取不同配置文件
如何实现根据环境切换不同配置?
拿开发环境和正式环境来说,比如开发环境的nacos地址是nacos.dev.biggerboy.com:8848而正式环境是nacos.biggerboy.com:8848
编程大道
2023/03/17
7810
如何实现根据环境切换不同配置?
这波啊~这波是多环境配置
一般来说,在日常开发中都会分多个环境,比如git代码分支会分为dev(开发)、release(测试)、pord(生产)等多个环境。可以说每个环境对应的配置信息(比如数据库、缓存、消息队列MQ等)都不相同。因此不同的环境肯定需要对应不同的配置文件。接下来学习一下怎么配置多环境的配置文件。
java技术爱好者
2021/11/19
5650
SpringBoot项目的pom文件配置多yml源,打包的时候手动选择yml配置
如果要打包为jar包,也是先选择哪个配置文件,然后刷新,之后打包,一定要刷新,不管什么操作最后都要刷新,选择的配置文件才可以生效;
一写代码就开心
2022/09/27
1.5K0
SpringBoot项目的pom文件配置多yml源,打包的时候手动选择yml配置
推荐阅读
相关推荐
Spring boot使用Maven Profile配合Spring Profile进行多环境配置和打包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档