当前位置: 首页 > article >正文

【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>

http://www.kler.cn/a/381794.html

相关文章:

  • 蓝桥杯物联网开发板硬件组成
  • 3.4 stm32系列:定时器(PWM、定时中断)
  • 全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(switch语句)
  • ECharts关系图-关系图11,附视频讲解与代码下载
  • Day13 用Excel表体验梯度下降法
  • css让按钮放在最右侧
  • SpringBoot+ClickHouse集成
  • PostgreSQL和MySQL在MVCC
  • 白杨SEO:百度在降低个人备案类网站搜索关键词排名和流量?怎样应对?【参考】
  • 计算机视觉实验三:图像分割
  • TVM前端研究--Pass
  • 开发中前后端联调
  • leetcode字符串(一)无重复字符最长子串
  • Spring Boot实战:构建大学城水电管理系统
  • 太空旅游:科技能否让星辰大海变为现实?
  • Spring源码学习(五):Spring AOP
  • 【综合案例】使用React编写B站评论案例
  • 什么是多因素身份验证(MFA)的安全性?
  • 函数对象笔记
  • vue3 ref,shallowRef,reactive,shallowReactive使用的简单异同点说明
  • sqlserver
  • (蓝桥杯C/C++)——基础算法(上)
  • wpf中行为
  • 【实用技能】在 SQL Server 中使用 LIMIT 子句的替代方案
  • 默认网关的ip为什么要和主机的ip处于一个网络
  • 【AI日记】24.11.05 向量数据库 weaviate、混合搜索、多语言搜索、明确自己的南京