Maven profile实现不同环境的配置管理实践

前言

目前,企业项目的开发过程中,往往会使用配置文件来做一些配置项来实现项目部署的灵活性,避免硬编码的方式在环境变化时需要对代码进行重新编译。但是往往在项目周期中存在着各种环境:如开发环境、测试环境以及生产环境等,而且在不同的运行环境中可能牵扯到大量的配置项变化。如果在不同的部署环境中切换,对配置文件的管理往往容易让程序员感觉非常的混乱。
为了避免这种换乱,研发过程中也有比较多的手段进行。比如,有公司就采用VPN的虚拟网络环境,让测试环境、生产环境的网络一致,让程序员在不同环境中对版本进行发布时只需要对VPN进行切换即可。以免发生网络配置项改错,漏改等现象的发生。这样个人觉得还不错,唯一有一点句是调整网络环境、设备环境的成本应该也比较高。
当然profile的方式应该算是比较经济的。我知道的比如spring-boot、maven都可以支持到profile的方式来对不同环境进行指定。本文希望介绍一下,我理解的使用maven的profile方式来进行不同环境切换。讲得不到位的地方希望看官嘴下留情,也多指定。

Maven 的 profile:

在maven的 pom.xml 文件中有一个配置项叫着profiles节点,如下:

 <profiles>
  <profile>
   <id>test</id>
   <properties>
    <active.profile>test</active.profile>
    <jdbc.url>127.0.0.1</jdbc.url>
   </properties>
   <activation>
    <activeByDefault>false</activeByDefault>
   </activation>
  </profile>
  <profile>
   <id>develop</id>
   <properties>
    <active.profile>develop</active.profile>
    <jdbc.url>192.168.1.102</jdbc.url>
   </properties>
   <activation>
    <activeByDefault>true</activeByDefault>
   </activation>
  </profile>
  <profile>
   <id>product</id>
   <properties>
    <actived.profile>product</actived.profile>
    <jdbc.url>10.21.41.100</jdbc.url>
   </properties>
   <activation>
    <activeByDefault>false</activeByDefault>
   </activation>
  </profile>
 </profiles>

其中profiles节点下可以填写多个profile 其中profile主要包含了三个属性idpropertiesactivation

id 应该是为了区分profile用的。
properties 就是对应的属性。
activation 应该是主要用来指定是否被默认激活的,它还有一个子节点activeByDefault, 如果子节点activeByDefault内的值为true表示他会被激活。它还有一些子节点,但是不知道什么用。后续看看在学习下。

实践前期准备

我准备建立一个简单的maven功能来实践一下maven的profile实现不同的配置管理,所以首先需要建议一个maven工程。本文采用的是idea进行试验的。一下是我建立工程的结构图。

由于我只是需要对配置文件进行管理,所以是完全不需要建立任何java类就可以的。

  • 首先建立了三个profile相关的配置文件 develop.propertiesproduct.propertiestest.properties
  • 在三个文件中我就只写了一个属性app.name,三个文件中分别为 develop.maven.profileproduct.maven.profiletest.maven.profile.
  • 为了验证在各类配置文件中都是可行的, 我建立了两个供测试的配置文件application.propertiesapplication.xml.

application.properties 的内容为:

application.xml的内容为:

实践一:

实践一主要采用profile + filter的方式实现内容的注入。
该方式的思想是通过 filter下的文件编写可变动的配置项,由filters标签引入不同的配置文件项,然后提取不同的配置文件中的配置项填充到resources下的配置文件中。
所以其中的关键标签包含了 profile filter resource

Maven的配置文件pom.xml的内容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <parent>
  <artifactId>maven-test</artifactId>
  <groupId>com.maomao.maven</groupId>
  <version>1.0-SNAPSHOT</version>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>maven-profile</artifactId>
 <version>1.0-SNAPSHOT</version>
 <profiles>
  <profile>
   <id>test</id>
   <properties>
    <active.profile>test</active.profile>
   </properties>
   <activation>
    <activeByDefault>false</activeByDefault>
   </activation>
  </profile>
  <profile>
   <id>develop</id>
   <properties>
    <active.profile>develop</active.profile>
   </properties>
   <activation>
    <activeByDefault>true</activeByDefault>
   </activation>
  </profile>
  <profile>
   <id>product</id>
   <properties>
    <actived.profile>product</actived.profile>
   </properties>
   <activation>
    <activeByDefault>false</activeByDefault>
   </activation>
  </profile>
 </profiles>
 <build>
  <filters>
   <filter>src/filters/${active.profile}.properties</filter>
  </filters>
  <resources>
   <resource>
   <!--一定要让filtering为true 否则无法对内容进行注入-->
    <filtering>true</filtering>
    <directory>src/main/resources</directory>
    <includes>
     <include>**/*.properties</include>
     <include>**/*.xml</include>
    </includes>
   </resource>
  </resources>
 </build>
</project>

执行maven命令进行打包:

mvn clean install 

执行后打包结果targets文件夹下的配置文件application.propertiesapplication.xml的占位置被填充。


当然如果切换profiles下的激活项,填充的内容自然也会发生变化。或者采用maven命令进行激活项的切换:

mvn clean package -Ptest # 指定激活项的ID

实践二:

实践二主要采用profile 直接将属性配置到了profile下的properties节点下。此方法就不在需要多余的filter properties文件配置了。
例如:

 <profile>
   <id>product</id>
   <properties>
    <actived.profile>product</actived.profile>
    <jdbc.url>10.21.41.100</jdbc.url>
   </properties>
   <activation>
    <activeByDefault>false</activeByDefault>
   </activation>
  </profile>

这里properites中多了一个jdbc.url属性。那我们的application.properties文件中同样适用两个占位符

app.name=${app.name}
jdbc.url=${jdbc.url}

同样执行maven命令进行打包:

mvn clean install -Pproduct

打包之后的 application.properties内容对应变为

结束语

整个内容写的有点乱,但是意思大概就是这个意思。主要想说maven可以搞这样一个事情。也给自己留个备忘录。如果有人来看到这个希望轻喷,我很少写东西。最近准备练习写东西,待改进的地方还是很多的,所以见谅了。

到此这篇关于Maven profile实现不同环境的配置管理实践的文章就介绍到这了,更多相关Maven profile配置管理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 使用maven profile指定配置文件打包适用多环境的方法

    开发过程, 我们习惯把数据源配置, 项目常量, 日志配置等基础数据配置写到一个个单独的的文件中. 如jdbc.properties等各种.格式的文件. 如何不频繁修改配置文件, 随时打包不同基础数据配置信息的项目. 1.新建maven项目,   在pom.xml中添加 profile节点信息如下: <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <envi

  • maven profile动态选择配置文件详解

    一.背景 在开发过程中,我们的软件会面对不同的运行环境,比如开发环境.测试环境.生产环境,而我们的软件在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力. maven提供了一种方便的解决这种问题的方案,就是profile功能. 二.profile简介 profile可以让我们定义一系列的配置信息,然后指定其激活条件.这样我们就可以定义多个pro

  • Maven profile实现不同环境的配置管理实践

    前言 目前,企业项目的开发过程中,往往会使用配置文件来做一些配置项来实现项目部署的灵活性,避免硬编码的方式在环境变化时需要对代码进行重新编译.但是往往在项目周期中存在着各种环境:如开发环境.测试环境以及生产环境等,而且在不同的运行环境中可能牵扯到大量的配置项变化.如果在不同的部署环境中切换,对配置文件的管理往往容易让程序员感觉非常的混乱. 为了避免这种换乱,研发过程中也有比较多的手段进行.比如,有公司就采用VPN的虚拟网络环境,让测试环境.生产环境的网络一致,让程序员在不同环境中对版本进行发布时

  • Java随手笔记8之包、环境变量和访问控制及maven profile实现多环境打包

    一.java中的包 Java利用包来组织代码,一来使大型项目的代码结构清晰,二来包是一个命名空间的划分,即不同包中可以有相同名字的类,只需在在类名前加上包名即可区分它们. Package xxx 必须位于java文件除了注释以外的第一行,用来指明当前文件中的类属于哪一个包,如果没有package语句,则该文件中的类都属于默认包. Import xxx用来在当前java文件中导入不属于当前包中的类,从而可以在当前文件中使用它们. 二.java中的环境变量 1.path 环境变量其实就是一组变量(废

  • maven profile实现多环境配置的示例

    环境:eclipse + spring mvc + maven 1.直接看图,把数据库的配置单独拿出来放在了resources_env目录下,三个不同环境参数不同, 2,在pom文件中添加配置 <profiles> <profile> <!-- 开发环境 --> <id>dev</id> <properties> <env>dev</env> </properties> <activation

  • 使用maven的profile构建不同环境配置的方法

    最近使用到了maven的profile功能,发现这个功能的确很好用也很实用,这块的知识比较多也比较乱,其实真正理解了之后非常简单,为了巩固总结知识,有个更清晰的知识体系,本文诞生了,希望能让像我一样零基础的小白一看就懂,有请戏精,闪亮登场~~ 1.背景 作为一名猿,在实际的项目开发中,通常会有很多配置环境,比如最基本的:开发.测试.生产:不同的环境,某些文件的配置是不一样的(如:数据库连接信息.properties文件的配置等),如果我们进行开发or测试时每次都得手动去修改配置文件,难免有些麻烦

  • 详解Maven profile配置管理及激活profile的几种方式

    为了实现不同环境构建的不同需求,这里使用到了 profile.因为 profile 能够在构建时修改 pom 的一个子集,或者添加额外的配置元素.接下来介绍 Maven 中对 profile 的配置和激活. 针对不同环境的 profile 的配置 为了体现不同环境的不同构建,需要配置好不同环境的 profile,代码如下: <profiles> <profile> <id>dev_evn</id> <properties> <db.driv

  • maven profile自动切换环境参数的2种方法详解

    前言 痛点: 在java开发的过程中,我们经常要面对各种各样的环境,比如开发环境,测试环境,正式环境,而这些环境对项目的需求也不相同. 在此之前,我们往往需要手动去修改相对应的配置文件然后打成war,才能部署到相应的环境上. 但是这样很容易出现问题,因为很容易出现少改或者漏改,造成不必要的麻烦 幻想: 要是有一种东西,能让我们打war的时候指定一个参数,就能自动把项目编译成对应环境的war,那该有多幸福啊!!! 结果:这样的东西还真有,那就是maven-profile 在开发过程中,我们经常会根

  • springcloud使用profile实现多环境配置方式

    目录 使用profile实现多环境配置 基本介绍 项目配置 springprofile多环境配置管理 现象 解决 激活profile 使用profile实现多环境配置 基本介绍 在开发过程中,我们的项目会存在不同的运行环境,比如开发环境.测试环境.生产环境,而我们的项目在不同的环境中,有的配置可能会不一样,比如数据源配置.日志文件配置.以及一些软件运行过程中的基本配置,那每次我们将软件部署到不同的环境时,都需要修改相应的配置文件,这样来回修改,很容易出错,而且浪费劳动力. springcloud

  • Java之Spring认证使用Profile配置运行环境讲解

    Spring提供了@Profile注解来解决程序在不同运行环境时候的配置差别. 项目开发时候大多包含:开发.测试.上线运行几个过程,在每个过程中软件的工作环境一般多少有些差别,比如:在开发阶段利用本地数据库.测试阶段采用测试数据库.在上线运行阶段使用生产数据库.这些差别如果采用了手工维护就会存在各种问题:效率低下.容易发生人为因素意外错误. 利用Spring提供的@Profile注解就可以定义程序不同的运行场景配置,配置以后在启动程序时候给定不同的启动参数就可以灵活的切换运行场景,不再需要人工干

  • Go 多环境下配置管理方案(多种方案)

    目录 需求 方案1:配置文件管理 方案2:集中式管理配置 需求 开发过程中开发者经常面对的一个需求就是:一个项目可能会在不同的环境下运行,本地开发环境.测试环境.灰度环境.生产环境.每个环境的参数和配置可能都会不相同,如服务器配置.数据库连接.为避免各环境产生数据混乱,让程序执行时在不同的环境中调用正确的配置,可以这样设计: 命令唤醒程序--->识别环境--->根据环境读取对应配置文件 方案1:配置文件管理 根据环境创建配置文件,多个环境多个配置文件.如开发环境 config-dev.yaml

随机推荐