Maven多环境配置
一、什么是Maven多环境配置?
** 在开发的过程中,经常需要面对不同的运行环境(开发环境、测试环境、生产环境、内网环境、外网环境等等),在不同的环境中,相关的配置一般不一样,比如数据源配置、日志文件配置、以及一些软件运行过程中的基本配置。每次在不同环境部署程序时,都需要修改相应的配置文件,使之完成环境的配置。这么做存在一个比较大的问题:每次修改配置非常麻烦,而且配置错误会产生不可预估的影响,比如,在发布生产环境时用的开发环境的配置还好,但如果在开发环境下用生产环境的数据,将会造成生产数据的污染,导致生产环境崩溃。这就是多环境配置! **
二、怎么用?
** 在maven中实现多环境的构建可移植性需要使用profile,通过不同的环境**不同的profile来达到构建的可移植性。 **
- ** 项目目录结构 **
Paste_Image.png
- ** 代码 **
jdbc.properties
jdbc.driver=${jdbc_driver}
jdbc.url=${jdbc_url}
jdbc.username=${jdbc_username}
jdbc.password=${jdbc_password}
filter-dev-env.properties
jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/dev
jdbc_username=root
jdbc_password=123456
filter-pro-env.properties
jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/pro
jdbc_username=root
jdbc_password=123456
filter-test-env.properties
jdbc_driver=com.mysql.jdbc.Driver
jdbc_url=jdbc:mysql://127.0.0.1:3306/test
jdbc_username=root
jdbc_password=123456
pom.xml
<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>pro</id>
<properties>
<profiles.active>pro</profiles.active>
</properties>
</profile>
</profiles>
<build>
<!-- maven模块化的话最好从父类继成取,打成包的命名 -->
<finalName>${artifactId}-${version}</finalName>
<!-- 使用指定的filter进行过滤,在执行mvn命令的时候带上-Ppro就代表生产环境,就会加载生产环境的properties,-Pdev就代表开发环境(默认) -->
<filters>
<filter>src/main/resources/multiEnv/filter-${profiles.active}-env.properties</filter>
</filters>
<!-- 配置需要被替换的资源文件路径, jdbc.properties -->
<resources>
<resource>
<!--
资源文件位置src/main/resources/,这下面的资源文件的${}会全部被替换成filter中的标签内容。
directory指定的value会作为classes的资源跟目录,
比如指定:src/main/resources/,则classes下会出现jdbc等包,
若指定:src/main/resources/jdbc/,则classes下直接出现jdbc包下的文件,不会额外出现jdbc等其他包结构。因为他把jdbc作为了根目录
-->
<directory>src/main/resources/</directory>
<!-- 在某个resource中如果设置filtering为true,将会根据输入参数动态修改相关内容。 -->
<filtering>true</filtering>
<!-- 排除标签 -->
<excludes>
<!--
exclude可以排除指定文件,支持通配符 ,匹配项不会生成到classes目录下,路径是以directory开始的
在这里就是directory(src/main/resources/)/multiEnv/filter-*-env.properties
-->
<exclude>multiEnv/filter-*-env.properties</exclude>
<!-- **/*.xml 代表 directory(src/main/resources/)目录以及所有子目录的xml文件-->
<!--
<exclude>**/*.xml</exclude>
<exclude>**/*.properties</exclude>
-->
</excludes>
<!-- 包含标签 -->
<!--
<includes>
<include></include>
</includes>
-->
</resource>
</resources>
</build>
-
** 如何运行? **
打包时,自己肯定知道是生产环境还是部署环境,所以只需要在打包的时候加上参数即可,如下:
打本地开发环境包:mvn clean package -Pdev
打部署上线环境包:mvn clean package -Ppro
打测试环境包:mvn clean package -Ptest
-
执行完命令后可以发现classes下的jdbc.properties变成了如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/pro
jdbc.username=root
jdbc.password=123456
上面配置文件随着打包不同内容不同,会将filter-dev-env.properties、filter-pro-env.properties、filter-test-env.properties三个文件的内容分别注入
作者:编程界的小学生
链接:https://www.jianshu.com/p/5650e5738d30
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
上一篇: shell脚本实现九九乘法表
下一篇: 自用CMakeLists.txt