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. mybatis代码自动生成工具之maven插件mybatis-generator-maven-plugin(mybatis逆向工程)

    mybatis自动代码生成工具maven插件可以帮助我们轻松的生成pojo.dao.mapper.xml文件,相比于mybatis-generator等其他方式方便许多,话不多说,上代码 先看一下整体 ...

  2. 动力节点笔记-Maven 自动化的构建工具

    目录 Maven 自动化的构建工具 第一章 Maven简介 1.1 软件开发中的阶段 1.2 Maven能做什么 1.3 没有使用maven怎么管理依赖 1.4 什么是maven 1.5 maven中 ...

  3. Junit 单元测试生成工具Maven插件

    junit-generator 介绍 一个基于JUnit,Freemarker,Mockito,Maven等技术实现的单元测试类脚手架生成工具Maven插件. 需求 我们在测试驱动开发过程中,总会写一 ...

  4. java生成单元测试工具_junit-generator Junit 单元测试生成工具Maven插件

    junit-generator 介绍 一个基于JUnit,Freemarker,Mockito,Maven等技术实现的单元测试类脚手架生成工具Maven插件. 需求 我们在测试驱动开发过程中,总会写一 ...

  5. AutoConfig工具使用

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

  6. maven 插件在线安装

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

  7. AutoConfig工具使用指南

    13.1. 需求分析 13.1.1. 解决方案 13.2. AutoConfig的设计 13.2.1. 角色与职责13.2.2. 分享二进制目标文件13.2.3. 部署二进制目标文件13.2.4. A ...

  8. 常用Maven插件介绍(上)

    转自 : http://www.infoq.com/cn/news/2011/04/xxb-maven-7-plugin 我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务, ...

  9. 用Maven插件生成Mybatis代码

    现在代码管理基本上是采用Maven管理,Maven的好处此处不多说,大家用百度搜索会有很多介绍,本文介绍一下用Maven工具如何生成Mybatis的代码及映射的文件. 一.配置Maven pom.xm ...

最新文章

  1. 主宰这个世界的10种算法
  2. 源哥每日一题第十七弹 poj 1568 Alpha-Beta剪枝
  3. QT的QSet类的使用
  4. java改变变量编码方式_Java 10将如何改变您的编码方式
  5. WinForm - 两个窗体之间的方法调用
  6. 利用延迟关联或者子查询优化超多分页场景
  7. 数据结构之图的遍历:广度优先遍历(BFS)
  8. 这是可用于下一个项目的React Native工具列表
  9. 关于BaseAdapter在listView中的使用
  10. 中国检测开关行业市场供需与战略研究报告
  11. python中confIgparser模块学习
  12. Robotium在输入框输入文字
  13. Nmap命令参数介绍
  14. 【模拟电路知识】运算放大器没有反馈电路——做电压比较器应用
  15. SpringBoot项目 四种读取properties文件的方式
  16. X书app数美-sid分析
  17. 诺基亚WP7手机或10月发布 搭载新版系统
  18. Deep Depth Completion of a Single RGB-D Image(深度像素补全)全文机器翻译
  19. 电商那些年,我摸爬打滚出的高并发架构实战精髓(2017-03-27 YYQ DBAplus社群)
  20. 【HTML】DAY 2

热门文章

  1. PHP利用CURL_MULTI实现多线程
  2. CSS3 overflow-x 属性
  3. 【Android游戏开发之六】在SurfaceView中添加组件!!!!并且相互交互数据!!!!...
  4. 微软对学生免费提供Visual Studio等开发软件(包括中国)
  5. 组合模型---贝叶斯模型平均
  6. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 12 章 全文搜索_12.9. GIN 和 GiST 索引类型
  7. Django Web开发学习笔记(4)
  8. 《现代教育技术》Win8版发布 项目总结
  9. 操作系统选择成固定模式 HTML5是潜在方向
  10. ubuntu LAMP安装