【07】Maven项目多环境打包配置
(1)Web项目使用Maven进行多模块划分开发之后,面临一个问题,即如何加载不同环境的配置文件打包发布到不同的环境中?
(2)不同的环境有开发环境、测试环境、线上生产环境等。
(3)本文将围绕这一主题给出具体的实现方案
Maven项目多环境打包配置
文章目录
- Maven项目多环境打包配置
- 1.解决思路
- 2.具体实现
- 2.1告诉Maven我们有哪些环境,现在默认使用哪个环境
- 2.2准备好各个环境的备置文件
- 2.3告诉Maven具体环境的配置文件在哪里
- 2.4见证奇迹的时刻
- 3.这种方案的好处
- 4.Maven项目一键热部署配置
1.解决思路
(1)首先我们要明确一点,即我们的需求是如果需要打开发环境的包,就只选取开发环境的配置文件,如果需要打测试环境的包,就只选取测试环境的配置文件,如果需要打线上生产环境的包,就只选取线上生产环境的配置文件。这件事情交给Maven帮我们干,但我们得告诉Maven怎么干。
(2)还要明确一条主线,我们是拿具体环境配置文件中的属性值赋给项目中配置占位符的地方。这个所谓的地方,可能是spring的配置文件,也可能是其他需要引用配置文件属性值的地方。总的来说,就是要完成具体环境配置文件的属性值给占位符赋上值。这件事情也得告诉Maven帮我们干。
2.具体实现
2.1告诉Maven我们有哪些环境,现在默认使用哪个环境
<!--
5.创建多环境
5.1适适多种多样的环境,让环境能够做多环境的区分,需要做两件事
(1)定义出多环境
(2)使用某一种环境
-->
<profiles>
<!--5.1.1定义具体的环境:开发环境-->
<profile>
<id>dev</id>
<properties>
<env>dev</env>
<remote_tomcat_server>http://192.168.10.8:8080/manager/text</remote_tomcat_server>
<server_name>tomcat9</server_name>
<tomcat_username>admin</tomcat_username>
<tomcat_password>1234</tomcat_password>
<tomcat_context_path>/gengducun</tomcat_context_path>
</properties>
<!--(1)设置默认使用 开发环境 的配置文件-->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<!--5.1.2定义具体的环境:测试环境-->
<profile>
<id>test</id>
<properties>
<env>test</env>
<remote_tomcat_server>http://192.168.10.6:8080/manager/text</remote_tomcat_server>
<server_name>tomcat9</server_name>
<tomcat_username>admin</tomcat_username>
<tomcat_password>1234</tomcat_password>
<tomcat_context_path>/gengducun</tomcat_context_path>
</properties>
</profile>
<!--5.1.3定义具体的环境:线上环境-->
<profile>
<id>pro</id>
<properties>
<env>pro</env>
<remote_tomcat_server>http://www.gengducun.com/manager/text</remote_tomcat_server>
<server_name>tomcat9</server_name>
<tomcat_username>admin</tomcat_username>
<tomcat_password>1234</tomcat_password>
<tomcat_context_path>/gengducun</tomcat_context_path>
</properties>
</profile>
</profiles>
2.2准备好各个环境的备置文件
(1)目录结构如下:
(2)具体环境具体配置文件的内容举例
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.10.8:3306/gdc
jdbc.username=yourname
jdbc.password=yourpwd
(3)有占位符的配置文件(图上面放在最外层的db.properties)
jdbc.driver=${jdbc.driver}
jdbc.url=${jdbc.url}
jdbc.username=${jdbc.username}
jdbc.password=${jdbc.password}
(4)spring具体引用的地方(引用的是放在最外层的db.properties的值)
2.3告诉Maven具体环境的配置文件在哪里
(1)在2.1中已经告诉Maven根据哪个环境去找配置文件
(2)当前这一步就是告诉Maven从哪个地方去找配置文件
主要靠以下这段搞定:
<resource>
<directory>${project.basedir}/src/main/resources/env/${env}</directory>
<includes>
<include>*/*.xml</include>
<include>*/*.properties</include>
<include>**.xml</include>
<include>**.properties</include>
</includes>
<filtering>true</filtering>
</resource>
a.
p
r
o
j
e
c
t
.
b
a
s
e
d
i
r
/
s
r
c
/
m
a
i
n
/
r
e
s
o
u
r
c
e
s
/
e
n
v
/
{project.basedir}/src/main/resources/env/
project.basedir/src/main/resources/env/{env}:这个意思翻译一下,就是到项目的资源文件夹resources/env/具体环境配置文件夹下去找。${env}引用的是我们具体的环境,例如去dev开发环境文件夹中去找配置文件。
b.include标签说明的是我们要找的资源文件包含哪些文件类型,用通配符表示的字符串值,是用来去匹配资源文件的,只要能匹配上的都算数。
(3)找到具体的配置文件之后,去把有占位符引用的配置文件填充上值。主要靠这句:
<filtering>true</filtering>
至此就完成了将配置文件的具体值,填充到有占位符引用的配置文件中。
(4)贴一下我的完整配置
<build>
<!--
9.开启目录过滤
(1)只有开启了目录过滤,才可以将具体环境的properties配置的值注入到相关的属性文件中
-->
<resources>
<!--9.1指定资源文件的目录,目前配置表示的是src/main/java目录下的xml文件和properties文件-->
<resource>
<directory>${project.basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<!--对占位符属性文件属性值进行赋值-->
<filtering>true</filtering>
</resource>
<!--
9.2指定资源文件的目录,当前配置表示的是所有模块的src/main/resources目录下的xml文件和properties文件
-->
<resource>
<directory>${project.basedir}/src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<!--对占位符属性文件属性值进行赋值-->
<filtering>true</filtering>
</resource>
<!--
9.3指定资源文件的目录,当前配置表示的是所有模块的src/main/resources/env/具体环境目录中的xml文件和properties文件
-->
<resource>
<directory>${project.basedir}/src/main/resources/env/${env}</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
<!--对占位符属性文件属性值进行赋值-->
<filtering>true</filtering>
</resource>
</resources>
<testResources>
<testResource>
<!--指定测试资源文件的目录-->
<directory>${project.basedir}/src/test/resources</directory>
<!--参与过滤-->
<!--<filtering>false</filtering>-->
</testResource>
</testResources>
</build>
2.4见证奇迹的时刻
(1)勾选一个环境,点击install,去查看Maven自动生成的文件中有占位符的文件是否被填充上值了。
3.这种方案的好处
(1)便于对属性文件值分环境管理,不会把pom.xml文件搞得太拥挤。
(2)对于后续在java代码中读取具体环境(开发、测试或线上)属性文件的值打下了良好的基础。比如说读取图片上传服务器的路径,文件存储服务器的路径等等。
4.Maven项目一键热部署配置
<!--8.插件统一管理,在子模块中去引用-->
<pluginManagement>
<plugins>
<!--8.1tomcat插件一键热部署Maven项目到多个远程服务器-->
<plugin>
<!--8.1.1tomcat插件的坐标-->
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<!--8.1.2maven项目热部署到远程tomcat服务器的配置,以下配置均是给Maven自己看的-->
<configuration>
<!--(1)远程tomcat服务器Manager App管理页面的请求路径-->
<url>${remote_tomcat_server}</url>
<!--(2)访问远程服务器tomcat的web项目的用户名与密码,这里的tomcat的Web项目,指的是有Manager App管理页的那个Web项目-->
<server>${server_name}</server>
<username>${tomcat_username}</username>
<password>${tomcat_password}</password>
<!--(3)发布的上下文访问路径,与tomcat管理目录中的路径对应,/表示发布到根目录-->
<path>${tomcat_context_path}</path>
<!--<update>true</update>会将发布目录下的数据清空-->
<update>true</update>
</configuration>
</plugin>
</plugins>
</pluginManagement>