AutoConfig 是一款 maven 插件,主要用于 Maven 项目打包使用。在我们的工作中,会将自己写的代码打成 jar 包或者 war 包发布到各种环境上。一般地,不用的环境所使用的数据库、缓存的配置是不同的。我们完全可以手工修改不用环境的配置,当然这种做法是非常耗费精力的。好在, maven 为我们提供了 profile 机制,但我在工作中还觉得它不够好,因为它把我的数据库用户名和密码配置在 pom.xml 文件中,pom 文件又被 git 所管理,其实就暴露了数据库连接的配置。于是我找到了一款非常好用的 maven 插件,实现不同环境使用不同的配置进行打包,同时又不会将 pom.xml 文件纳入 git 仓库管理。

以下所写的均是基于下面的这篇资料整理的一份操作笔记,供自己查阅和别人参考。

第 13 章 AutoConfig工具使用指南 
http://openwebx.org/docs/autoconfig.html

操作步骤:

1、将项目的打包方式设置为 war ; 
2、建立打包方式为 war 的文件夹和文件:

3、编写 auto-config.xml 文件,示例代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<group>
<property name="datasource.slave.host" defaultValue="127.0.0.1" description="datasource slave host" />
<property name="datasource.slave.port" defaultValue="3306" description="datasource slave port" />
<property name="datasource.slave.db" defaultValue="read" description="datasource slave db" />
<property name="datasource.slave.username" defaultValue="root" description="datasource slave username" />
<property name="datasource.slave.password" defaultValue="123456" description=" datasource slave password" />
<property name="datasource.slave.maxconn" defaultValue="50" description="datasource slave maxconn" />
<property name="datasource.slave.minconn" defaultValue="25" description="datasource slave minconn" />
</group>
<group>
<property name="datasource.master.host" defaultValue="127.0.0.1" description="datasource master host" />
<property name="datasource.master.port" defaultValue="3306" description="datasource master port" />
<property name="datasource.master.db" defaultValue="read" description="datasource master db" />
<property name="datasource.master.username" defaultValue="root" description="datasource master username" />
<property name="datasource.master.password" defaultValue="123456" description="datasource master password" />
<property name="datasource.master.maxconn" defaultValue="50" description="datasource master maxconn" />
<property name="datasource.master.minconn" defaultValue="25" description="datasource master minconn" />
</group>
<script>
<generate template="application.properties.vm" destfile="WEB-INF/classes/application.properties" />
</script>
</config>
  • 注意:上面的 script 子标签,将根据 application.properties.vm 模板文件的内容去生成打包好的文件中的 WEB-INF/classes/application.properties 文件。

下面我们编写 application.properties.vm 模板文件。

4、编写 application.properties.vm 模板文件

datasource.slave.host=${datasource.slave.host}
datasource.slave.port=${datasource.slave.port}
datasource.slave.db=${datasource.slave.db}
datasource.slave.username=${datasource.slave.username}
datasource.slave.password=${datasource.slave.password}
datasource.slave.maxconn=${datasource.slave.maxconn}
datasource.slave.minconn=${datasource.slave.minconn} datasource.master.host=${datasource.master.host}
datasource.master.port=${datasource.master.port}
datasource.master.db=${datasource.master.db}
datasource.master.username=${datasource.master.username}
datasource.master.password=${datasource.master.password}
datasource.master.maxconn=${datasource.master.maxconn}
datasource.master.minconn=${datasource.master.minconn}
  • 注意:这里的 ${datasource.slave.host} 应该和第 3 步的 auto-config.xml 文件中配置的 property 子节点 name 属性对应

5、编写 pom.xml 文件引入 autoconfig 插件

(1)将该插件的 autoconfig 目标绑定到 maven 生命周期的 package 阶段

<plugin>
<groupId>com.alibaba.citrus.tool</groupId>
<artifactId>autoconfig-maven-plugin</artifactId>
<version>1.2</version>
<configuration>
<userProperties>${autoconfig.path}/${autoconfig.file}</userProperties>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>autoconfig</goal>
</goals>
</execution>
</executions>
</plugin>
  • (2)为了使得配置更加灵活,我们配置属性 autoconfig.path 和 autoconfig.file
<autoconfig.path>${user.home}/antx-config/${artifactId}/${devModel}</autoconfig.path>
<autoconfig.file>antx.properties</autoconfig.file>

其中,${user.home} 是 maven 定义的系统属性,这里代表操作系统的宿主目录。

(3)下面定义 profile

<profiles>
<!-- 开发环境:本机 -->
<profile>
<id>dev</id>
<properties>
<devModel>dev</devModel>
<autoconfig.file>antx.properties</autoconfig.file>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile> <!-- 内测环境:内网 192.168.12.250 -->
<profile>
<id>beta</id>
<properties>
<devModel>beta</devModel>
<autoconfig.file>antx.properties</autoconfig.file>
</properties>
</profile> <!-- 集成测试环境:lyced -->
<profile>
<id>inte</id>
<properties>
<devModel>inte</devModel>
<autoconfig.file>antx.properties</autoconfig.file>
</properties>
</profile> <!-- 生产环境:17english -->
<profile>
<id>pro</id>
<properties>
<devModel>pro</devModel>
<autoconfig.file>antx.properties</autoconfig.file>
</properties>
</profile>
</profiles>

以上就基本完成了 autoconfig 的配置。我们执行 maven 的 package 目标,就可以看到 autoconfig 生效了。

如果你使用 IntelliJ IDEA 作为开发工具,你可以使用下面的方式执行 maven 的 package 目标,带上 profile 。

注意事项: 
1、文件夹要自己建立,autoconfig 插件不会帮你创建文件夹;

maven 插件之 AutoConfig 工具使用笔记的更多相关文章

  1. Dynamic CRM 2013学习笔记(四)单据编号及插件批量注册工具

    基本上每个实体form上都会有单据编号,而且不同的实体编号要求还不太一样,这时就需要一个通用的单据编号插件,可配置以应对不同的需求. 下面简单介绍下实现步骤: 1. 创建二个实体,以保存各实体所要求的 ...

  2. 学习笔记——Maven实战(七)常用Maven插件介绍(上)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven-compiler-plugin完成的.进一步说,每个任务对应了 ...

  3. 学习笔记——Maven实战(八)常用Maven插件介绍(下)

    我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成,例如编译源代码是由maven- compiler-plugin完成的.进一步说,每个任务对应 ...

  4. MAVEN学习笔记之Maven插件的应用(4)

    MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...

  5. 笔记:Maven 插件及配置详解

    插件使用配置 用户能够自己选择将某个插件目标绑定到生命周期的某个阶段上,例如创建项目的源码JAR包,内置的插件绑定关系并没有涉及这个任务,mavent-source-plugin 可以帮助我们完成该任 ...

  6. maven 插件在线安装

    NO.1 在Eclipse中安装Maven插件安装详解 前言 本来是没打算写博客的,作为一个13年毕业的菜鸟,自认为水平太渣写不出什么好文章,但是前些日子看到一篇鼓励性质的文章说,技术人员的成长靠的就 ...

  7. AutoConfig工具使用

    下载安装Auto工具包: http://code.taobao.org/mvn/repository/com/alibaba/citrus/tool/antx-autoconfig/1.0.9/ant ...

  8. AutoConfig工具使用指南

    转载:http://blog.csdn.net/fighterandknight/article/details/70245905 13.1. 需求分析 13.1.1. 解决方案 13.2. Auto ...

  9. eclipse安装svn和maven插件以及m2e-extras

    相关介绍: 1.SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Su ...

随机推荐

  1. 操作MySQL数据库相关代码

    注意事项: 1.导入驱动包,如我导的是mysql-connector-java-5.1.26-bin.jar 2.修改下面代码中的用户名和密码 3.其中URL为"jdbc:mysql://数 ...

  2. django学习随笔:ManagementUtility

    ManagementUtility类,位于django.core.management目录下的__init__.py文件. 这个类,在其init中: def __init__(self, argv=N ...

  3. Django之模型ORM

    ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述 ...

  4. JS面试题及答案

    一.JS闭包. f = function() {return true;};    g = function() {return false;};    (function() {       if ...

  5. 关于Promise 简单使用理解

    在学一个新的知识的时候,我的总结是首先要具备相关的基础知识,其次就是可以静下心来能看进去去理解,看一两遍不懂,就看四五遍,甚至六七遍,每一遍都认真努力理解,总会学会的. Promise是一个构造函数, ...

  6. [转]python dubbo接口测试

    转自:https://www.cnblogs.com/chunyanxu/p/8732734.html 会吐泡泡的鱼 博客园 首页 新闻 新随笔 联系 管理 订阅 随笔- 57  文章- 0  评论- ...

  7. mysql:把DB1中A表a字段替换为DB2中B表b字段

    UPDATE DB1.A SET a = ( SELECT b FROM DB2.B WHERE B.Id = A.id) 实例: UPDATE wordpress.`wp_posts` SET po ...

  8. mimikatz-域密码获取神器

    mimikatz是一个法国人写的轻量级调试器.出众之处在于其可以直接从 lsass.exe 里猎取windows处于active状态账号明文密码,非常强大. 在网上找了一些相关的文章自己的一点总结吧 ...

  9. aoj 0033 Ball【dfs/枚举】

    有一个形似央视大楼(Orz)的筒,从A口可以放球,放进去的球可通过挡板DE使其掉进B裤管或C裤管里,现有带1-10标号的球按给定顺序从A口放入,问是否有一种控制挡板的策略可以使B裤管和C裤管中的球从下 ...

  10. Proxmox VE

    Proxmox虚拟化环境是基于QEMU/KVM和LXC的开源服务器虚拟化管理解决方案.我们可以使用集成的易于使用的WEB界面或通过CLI管理虚拟机,容器,高可用集群,存储和网络. Proxmox VE ...