技术汇总:第十章:Maven Profile动态选择配置文件

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 技术汇总:第十章:Maven Profile动态选择配置文件

Maven Profile

什么是MavenProfile

在我们平常的java开发中,会经常使用到很多配制文件(xxx.properties,xxx.xml),而当我们在本地开发(dev),测试环境测试(test),线上生产使用(product)时,需要不停的去修改这些配制文件,次数一多,相当麻烦。现在,利用maven的filter和profile功能,我们可实现在编译阶段简单的指定一个参数就能切换配制,提高效率,还不容易出错.


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

Maven Profile入门

修改pinyougou-page-web的pom.xml

 <properties>
    <port>9105</port>
  </properties>
  <build>  
    <plugins>      
        <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
          <!-- 指定端口 -->
          <port>${port}</port>
          <!-- 请求路径 -->
          <path>/</path>
        </configuration>
        </plugin>
    </plugins>  
    </build>

运行tomcat7:run ,发现运行结果是一样的,因为port是变量,而变量值是定义为9105。这其实就是我们之前学习的maven的变量。


那我们现在思考一下,如果这个端口在开发时使用9105,如果在生产环境(或其他环境)为9205呢?如何解决值的动态切换呢?


这时我们修改pom.xml,增加profile定义

  <profiles>
    <profile>
      <id>dev</id>
      <properties>
        <port>9105</port>
      </properties>
    </profile>
    <profile>
      <id>pro</id>
      <properties>
        <port>9205</port>
      </properties>
    </profile>  
  </profiles>

执行命令 tomcat7:run -P pro  发现以9205端口启动


执行命令 tomcat7:run -P dev  发现以9105端口启动


-P 后边跟的是profile的id


如果我们只执行命令tomcat7:run ,也是以9105启动,因为我们一开始定义的变量值就是9105,就是在不指定profileID时的默认值.

切换数据库连接配置

编写不同环境的配置文件

1)我们在pinyougou-dao工程中src/main/resources下创建filter文件夹


(2)filter文件夹下创建db_dev.properties ,用于配置开发环境用到的数据库


//

env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/pinyougoudb?characterEncoding=utf-8
env.jdbc.username=root
env.jdbc.password=123456

(3)filter文件夹下创建db_pro.properties  

env.jdbc.driver=com.mysql.jdbc.Driver
env.jdbc.url=jdbc:mysql://localhost:3306/pinyougoudb_pro?characterEncoding=utf-8
env.jdbc.username=root
env.jdbc.password=123456

(4)修改properties下的db.properties

jdbc.driver=${env.jdbc.driver}
jdbc.url=${env.jdbc.url}
jdbc.username=${env.jdbc.username}
jdbc.password=${env.jdbc.password}

定义Profile

修改pom.xml

  <properties>
      <env>dev</env>
  </properties>
  <profiles>
    <profile>
      <id>dev</id>
      <properties>
        <env>dev</env>
      </properties>
    </profile>    
    <profile>
      <id>pro</id>
      <properties>
        <env>pro</env>
      </properties>
    </profile>
  </profiles>

这里我们定义了2个profile,分别是开发环境和生产环境


资源过滤与变量替换

修改pom.xml ,在build节点中添加如下配置

<filters>
   <filter>src/main/resources/filters/db_${env}.properties</filter>
   </filters>
   <resources>
   <resource>
   <directory>src/main/resources</directory>
   <filtering>true</filtering>
   </resource>  
   </resources>

这里我们利用filter实现对资源文件(resouces) 过滤

maven filter可利用指定的xxx.properties中对应的key=value对资源文件中的${key}进行替换,最终把你的资源文件中的username=${key}替换成username=value

打包

在pinyougou-dao 工程 执行命令:package -P pro ,  解压生成的jar包,观察db.properties配置文件内容,已经替换为生产环境的值。

在pinyougou-sellergoods-service工程 执行命令 pageage  ,解压生成的war包里的pinyougou-dao的jar包,发现也是生成环境的值。

测试运行

1】连接生产数据库


(1)在pinyougou-dao 工程执行命令:install -P pro


(2)在pinyougou-sellergoods-service:执行命令:tomcat7:run


(3)在pinyougou-shop-web :  执行命令:tomcat7:run


【2】连接开发数据库


(1)在pinyougou-dao 工程执行命令:install -P dev  (或 install   )


(2)在pinyougou-sellergoods-service:执行命令:tomcat7:run


(3)在pinyougou-shop-web :  执行命令:tomcat7:run

切换注册中心连接配置

集中配置注册中心地址

在pinyougou-common工程中properties下创建dubbox.properties

address=192.168.0.135:2181

Spring目录下创建spring配置文件 applicationContext-dubbox.xml 配置如下:

<dubbo:registryprotocol="zookeeper"address="${address}"/>

所有的服务工程与web工程都要依赖pinyougou-common . 并删除每个工程中关于注册中心地址的配置  

安装pinyougou-common到本地仓库,然后测试运行。

MavenProfile配置


在pinyougou-common工程中创建filters目录 ,目录下建立dubbox_dev.properties

env.address=192.168.25.135:2181

建立dubbox_pro.properties

env.address=192.168.25.136:2181

修改dubbox.properties

address=${env.address}

修改pinyougou-common的pom.xml

<properties>
    <env>dev</env>  
</properties>
 <profiles>
  <profile>
    <id>dev</id>
    <properties>
      <env>dev</env>
    </properties>
  </profile>
  <profile>
    <id>pro</id>
    <properties>
      <env>pro</env>
    </properties>
  </profile>
</profiles> 
.............................
 <build>
    <filters>
      <filter>src/main/resources/filters/dubbox_${env}.properties</filter>
    </filters>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource> 
    </resources>  
  </build>

参考资料:https://www.cnblogs.com/0201zcr/p/6262762.html

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
25天前
|
Java Shell 应用服务中间件
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
这篇文章介绍了如何在Mac系统下配置Java JDK、Maven和Tomcat的环境变量,包括配置文件的选择、解决环境变量在zsh shell中无效的问题、查看和设置系统环境变量的方法,以及JDK和Maven的下载、配置和测试步骤。
1003 1
Mac系统下配置环境变量:Javajdk、maven、tomcat 环境变量配置及对应配置文件
|
5月前
|
XML Java Maven
Maven 构建配置文件
Maven的构建配置文件在`pom.xml`和`settings.xml`中定义,用于定制不同环境(如开发、测试、生产)的构建。配置文件有项目级、用户级和全局级三种,通过命令行、设置或环境变量激活。示例中,`env.properties`、`.test`和`.prod.properties`用于模拟配置选择,当构建配置为`prod`时,项目读取`env.prod.properties`。AntRun插件常用于绑定生命周期阶段执行任务,但与配置文件的核心功能分开。
|
3月前
|
Oracle Java 关系型数据库
2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改
这篇文章提供了在CentOS 7上安装Maven的详细步骤,包括从官网下载Maven、创建文件夹、上传和解压Maven安装包、配置环境变量、设置Maven源为阿里云、指定jar包仓库位置、配置JDK版本,并验证安装是否成功。
2022 年超详细过程步骤讲解 CentOS 7 安装Maven。以及Mavne配置文件的修改
|
4月前
|
XML Java Maven
Maven 构建配置文件
Maven构建配置文件用于定制不同环境的构建,如生产与开发。配置在`pom.xml`的`profiles`中,可通过命令行、设置文件、环境变量等方式激活。配置文件分项目级、用户级和全局级。例如,`env.properties`为默认,`env.test.properties`和`env.prod.properties`代表测试和生产环境。激活配置文件可影响如数据库URL等参数。示例中用AntRun插件展示配置应用,但实际配置文件功能不限于此。
|
5月前
|
XML Java Maven
Maven 构建配置文件
Maven的构建配置文件(如pom.xml, settings.xml)用于定制构建,适应不同环境(如生产、开发)。配置文件通过activeProfiles或profiles指定,可修改POM以适应目标环境,如数据库URL。配置文件分为项目级、用户级和全局级。激活方式包括命令行、Maven设置、环境变量、操作系统设置和文件存在。示例中,env.properties等文件用于模拟配置选择,AntRun插件用于生命周期操作,非配置文件功能本身。
|
5月前
|
XML Java Maven
Maven 构建配置文件
Maven构建配置文件允许定制开发和生产环境的构建。配置在`pom.xml`或`settings.xml`(用户级/全局)中定义,通过activeProfiles或profiles元素指定。配置文件可按需激活,如命令行参数、环境变量或文件存在。示例中,env.properties及其变体用于模拟不同环境的配置,但非Maven配置文件本身,它们展示了配置如何影响项目行为。AntRun插件用于演示生命周期集成,不直接相关于配置文件。
|
4月前
|
Java Maven
JWT的Maven配置文件
JWT的Maven配置文件
|
4月前
|
XML Java Maven
Maven 构建配置文件
Maven配置文件定制构建流程,适应生产与开发环境。配置在`pom.xml`的`profiles`元素中,可按项目、用户或全局定义。激活方式包括命令行、Maven设置、环境变量和文件存在性。例如,`env.properties`(默认)、`env.test.properties`(测试)和`env.prod.properties`(生产)用于不同环境,但非Maven配置文件本身,而是示例中的测试资源。AntRun插件常用于生命周期集成,不直接涉及配置文件管理。
|
5月前
|
Java Maven XML
Maven 构建配置文件
Maven的构建配置文件在`pom.xml`或`settings.xml`(用户级/全局)中定义,用于定制不同环境的构建方式。配置文件通过activeProfiles或profiles元素指定,可按命令行、Maven设置、环境变量、操作系统设置或文件存在与否激活。示例中,`env.properties`是默认配置,`env.test.properties`和`env.prod.properties`对应测试和生产环境。这些文件并非构建配置文件,而是测试用例。例子中使用AntRun插件演示配置应用。
|
5月前
|
XML Java 数据库连接
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
技术笔记:Maven的pom.xml(坐标的gav、依赖的scope)
162 0