如何进行mavenprofile动态选择配置文件
创始人
2024-12-23 14:01:36
0次

一、背景

在开发过程中,我们的软件会面对不同的运行环境,比如开发环境、测试环境、生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力。

maven提供了一种方便的解决这种问题的方案,就是profile功能。

二、profile简介

profile可以让我们定义一系列的配置信息,然后指定其激活条件。这样我们就可以定义多个profile,然后每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置信息的效果。

profile定义的位置

(1)针对于特定项目的profile配置我们可以定义在该项目的pom.xml中。(下面举例是这种方式)

(2) 针对于特定用户的profile配置,我们可以在用户的settings.xml文件中定义profile。该文件在用户家目录下的“.m2”目录下。

(3)全局的profile配置。全局的profile是定义在Maven安装目录下的“conf/settings.xml”文件中的。

三、配置动态打包

1、配置profile

在项目的profile中添加如下的profile配置:

         dev          dev                    true                release          release                beta          beta      

这里定义了三个环境,分别是dev(开发环境)、beta(测试环境)、release(发布环境),其中开发环境是默认激活的(activeByDefault为true),这样如果在不指定profile时默认是开发环境,也在package的时候显示指定你要选择哪个开发环境,详情见后面。

2、配置文件

针对不同的环境,我们定义了不同的配置文件,文件目录如下:

如图所示,开发环境、测试环境、生产环境的配置文件分别放到src/main/resources目录下的config文件夹下。

config下有多个环境的配置文件,命名规则为是application-环境名称.properties。

处理过程:

1)通过profile选中你要使用的环境

2)通过package命令,将环境变量注入到application.properties中(这样子,那些公用的环境变量就不用在各个环境的配置文件中配置了)

3)项目中加载application.xml文件

加载配置文件

例子:

application-beta.properties文件有如下部分内容:

env.datasource.jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&zeroDateTimeBehavior=roundenv.datasource.username=rootenv.datasource.password=12233

application.properties有部分如下内容用于注入上面的内容:

datasource.jdbcUrl=${env.datasource.jdbcUrl}datasource.username=${env.datasource.username}datasource.password=${env.datasource.password}

3、maven资源插件配置

在pom.xml的build结点下,配置资源文件的位置,如下所示:

   seewo-admin              src/main/resources/config/application-${env}.properties                      src/main/resources        true                            org.apache.maven.plugins        maven-war-plugin            

这里注意一个参数true,一定要设置成true.这样才会用对应env目录下的配置文件覆盖原来的。

4、激活profile

1)默认的激活

上面的profile配置中设置的默认的激活环境。如下面所示

true

2)使用-P参数显示激活一个profile

当我们在进行Maven操作时就可以使用-P参数显示的指定当前激活的是哪一个profile了。比如我们需要在对项目进行打包的时候使用id为dev的profile,我们就可以这样做:

mvn package –Pdev

这里假设dev是在settings.xml中使用dev标记的处于激活状态的profile,那么当我们使用“-P !profile”的时候就表示在当前操作中该profile将不处于激活状态。

5、调用

private Logger logger = LogManager.getLogger(MyApp.class.getName());

其他的使用和log4j的是一样的。

四、遇到的坑

在application.xml文件中不能出现@关键字,就算你注释了也不行。当出现@了,之后的所有环境变量将不会被注入

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...