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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/909509.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Unity Shader】Special Effects(十)Change 变换(UI)

源码:[点我获取源码] 索引 Change 变换思路分析变换进度噪声纹理闪烁闪烁时机闪烁颜色闪烁动画Change 变换 变换的效果为图像间的切换带来动感过程,使用动画播放器: 思路分析 首先,从原始图像变换到目标图像是一个从0到1的过程,这个过程我们命名为变换进度(0为完全显…

关于wordpress instagram feed 插件 (现更名为Smash Balloon Social Photo Feed)

插件地址&#xff1a; Smash Balloon Social Photo Feed – Easy Social Feeds Plugin – WordPress 插件 | WordPress.org China 简体中文 安装后&#xff0c;配置教程&#xff1a; Setting up the Instagram Feed Pro WordPress Plugin - Smash Balloon 从这里面开始看就…

JavaScript的对象事件处理程序

一、对象的事件 对象的事件是指在一个对象上发生的特定动作或状态改变。对象可以是现实世界中的物体、概念、数据结构等。根据对象的类型和功能&#xff0c;可能会有不同类型的事件。 对象的事件一般由对象的方法或属性来处理和触发。通过定义对象的方法和属性&#xff0c;可…

Win11 CLion Qt开发探索

文章目录 一、Win11 CLion Qt需要的环境二、环境说明三、Win11 CLion Qt 开发步骤四、CLion Qt CMake脚本相关配置4.1 在CLion里如何使用资源文件.qrc4.2 Qt6 cmake如何添加ts翻译文件 五、程序打包 本篇博客介绍在Win11上使用CLion来编写Qt QWidget项目。 视频讲解&#xff1a…

Windows Server2012 R2搭建NFS服务器

正文共&#xff1a;1024 字 23 图&#xff0c;预估阅读时间&#xff1a;1 分钟 在测试vCenter的集群操作时&#xff0c;出现了共享vSAN错误的问题&#xff0c;导致无法继续。我也只好先创建一个共享NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;存储…

信息安全工程师(77)常见网络安全应急事件场景与处理流程

前言 网络安全应急事件场景多样&#xff0c;处理流程也需根据具体情况灵活调整。以下将详述几种常见的网络安全应急事件场景及其处理流程。 一、数据泄露事件 场景描述&#xff1a; 数据泄露是指敏感、受保护或机密数据被未经授权的个人复制、传输、查看、窃取或使用。这种事件…

win10下MMSegmentation自定义数据集

下载1.2.1版本: Releases open-mmlab/mmsegmentation GitHub 安装环境 本地torch环境为1.9.1 pip install -U openmim mim install mmengine mim install "mmcv>=2.0.0" 报mmcv版本不匹配的问题,形如:MMCV==X.X.X is used but incompatible. Please inst…

低代码解锁跨平台应用开发新境界

数字化转型中&#xff0c;企业面临应用开发挑战&#xff0c;低代码平台成为理想选择。ZohoCreator提供统一开发环境、拖拽设计、预置模板等&#xff0c;支持高效构建跨平台应用&#xff0c;确保数据安全与合规&#xff0c;助力企业数字化转型。 一、低代码平台是什么&#xff1…

yolov8涨点系列之C2f模块改进主分支

文章目录 C2F 模块介绍定义与基本原理应用场景 C2f模块修改步骤(1) C2f_up模块编辑(2)在__init_.pyblock.py中声明&#xff08;3&#xff09;在task.py中声明yolov8引入C2f_up模块yolov8.yamlyolov8.yaml引入C2f_up模块 C2f改进对YOLOv8检测具有多方面的好处 C2F 模块介绍 定义…

数据结构算法篇--递归(c语言版)

目录 1.递归 1.1求阶乘&#xff1a; 1.2.斐波那契数 1.3. 求幂 1.递归 在C语言中&#xff0c;递归是一种函数调用自身的方法&#xff0c;用来解决一些具有重复性质的问题。例如&#xff0c;计算阶乘、斐波那契数列等问题都可以通过递归实现。 递归在书写的时候&#xff0…

[大模型]视频生成-Sora简析

参考资料&#xff1a; Sora技术报告https://openai.com/index/video-generation-models-as-world-simulators/4分钟详细揭密&#xff01;Sora视频生成模型原理https://www.bilibili.com/video/BV1AW421K7Ut 一、概述 相较于Gen-2、Stable Diffusion、Pika等生成模型的前辈&am…

【数据仓库】Hive 拉链表实践

背景 拉链表是一种数据模型&#xff0c;主要是针对数据仓库设计中表存储数据的方式而定义的&#xff1b;顾名思义&#xff0c;所谓拉链表&#xff0c;就是记录历史。记录一个事务从开始一直到当前状态的所有变化的信息。 拉链表可以避免按每一天存储所有记录造成的海量存储问题…

UnityAssetsBundle字体优化解决方案

Unity开发某个项目&#xff0c;打包后的apk包体已经高达1.25G了&#xff0c;这是非常离谱的。为了不影响用户体验&#xff0c;需要将apk包体缩小。因为项目本身不包含很多模型以及其他大型资源&#xff0c;排除法将AB包删除&#xff0c;发现app本身就100多M。 由此可以锁定是AB…

高通Quick板上安装编译Ros1 noetic,LeGO_LOAM,FAR_Planner和rslidar_sdk

环境要求&#xff1a; 这里quick板上安装的是Ubuntu20.04版本 Ros Noeti安装&#xff1a; 1.设置软件源&#xff1a; 官方提供的软件源&#xff1a; sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.…

Qt多边形填充/不填充绘制

1 填充多边形绘制形式 void GraphicsPolygonItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {Q_UNUSED(option);Q_UNUSED(widget);//painter->setPen(pen()); // 设置默认画笔//painter->setBrush(brush()); // 设置默…

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG

零基础学习Spring AI Java AI使用向量数据库postgresql 检索增强生成 RAG 向量数据库是一种特殊类型的数据库&#xff0c;在人工智能应用中发挥着至关重要的作用。 在向量数据库中&#xff0c;查询与传统的关系数据库不同。它们不是进行精确匹配&#xff0c;而是执行相似性搜…

如何在 uniapp 中实现图形验证码

全篇大概2000 字&#xff08;含代码&#xff09;&#xff0c;建议阅读时间10分钟。 什么是图形验证码&#xff1f; 图形验证码&#xff08;也称为图片验证码或验证码图像&#xff09;通常用于防止机器人自动提交表单&#xff0c;确保用户是人工操作。 一、需求 我们希望在一个…

mysql error:1449权限问题 及 用户授权

一、权限问题 Got error: 1449: The user specified as a definer (skip-grants userskip-grants host) does not exist when using LOCK TABLES 在迁移数据库时&#xff0c;定义的definer&#xff0c;在两个数据库之间不同步时&#xff0c;要将不存在的definer改成数据库中已…

uniapp+vue加油服务系统 微信小程序

文章目录 项目介绍具体实现截图技术介绍mvc设计模式小程序框架以及目录结构介绍错误处理和异常处理java类核心代码部分展示详细视频演示源码获取 项目介绍 基于微信小程序的加油服务系统设计为微信小程序和后台管理两个服务端&#xff0c;并对此设计相应的功能模块如下&#x…

【MFC编程(一)】MFC概述

文章目录 MFC概述MFC组成MFC对比Windows APIMFC类库基类CObject命令发送类CCmdTarget应用程序结构类应用程序线程支持类CWinThread/CWinApp文档类CDocument文档模板类CDocTemplate 窗口类窗口基类CWnd边框窗口类CFrameWnd视图类CView MFC概述 MFC&#xff08;Microsoft Founda…