AutoConfig插件是什么?
AutoConfig是一种类似于Maven Filtering的build时刻的工具。这意味着该机制与应用所采用的技术、框架完全无关,对应用完全透明,具有良好的通用性。同时,AutoConfig与运行时的配置技术并不冲突。它可以和运行时替换的placeholders以及中心配置服务器完美并存,互为补充。
AutoConfig书写placeholder的方法和Maven Filtering机制完全相同。换言之,Maven Filtering的配置文件模板可以不加修改地用在AutoConfig中。
使用步骤
引入POM文件
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.alibaba.citrus.tool</groupId>
<artifactId>autoconfig-maven-plugin</artifactId>
<version>${autoconfig-maven-plugin.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
在pom.xml中设定AutoConfig plugin
<plugin>
<groupId>com.alibaba.citrus.tool</groupId>
<artifactId>autoconfig-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>autoconfig</goal>
</goals>
</execution>
</executions>
</plugin>
创建文件结构
纯jar包项目,在resources资源包下META-INF目录下创建autoconf目录,再在这个目录下创建一个很重要的配置文件auto-config.xml,这个文件定义properties和property的默认值和验证规则,和生成配置文件的指令。
<?xml version="1.0" encoding="UTF-8"?>
<config>
<group name="分组名称">
<property name="property1" defaultValue="默认值" description="描述" required="true"/>
</group>
<script>
<generate template="需要配置的模版名,相对路径" destfile="不指定,生成的目标文件和模版文件名相同" charset="模版字符编码"/>
</script>
</config>
配置模版样例
property1=${property1}
踩坑记录
在idea上运行时,AutoConfig默认每次都会删除target/classes/META-INF/autoconf下除auto-config.xml文件外的其他配置(com.taobao.pandora.boot.autoconf.autoConfigure 33行),如果你的配置模版放在这个文件夹里会被删除从而导致出现java.lang.reflect.InvocationTargetException异常, Could not find template file,如果遇到这种情况有两种方法解决。
1,就是不让它删除文件,在idea启动参数中增加-Dautoconfig.clean.metaInf=false。
2,就是把你的配置模版放到autoconf问价夹外的地方。