常见的Java应用属性配置方案
1)框架运行时参数placeholder占位符替换
很多框架支持在运行时刻替换配置文件中的placeholder占位符。
<services:property-placeholder />
<services:webx-configuration>
<services:productionMode>${productionMode:true}</services:productionMode>
</services:webx-configuration>
你可以在启动应用时,加上JVM参数:“
-DproductionMode=false|true
”来告诉系统用哪一种模式来工作。如果不指定,则取默认值“
true
”。
---------优缺点:
不同框架进行运行时placeholder占位符替换的实现方式不同
2)中心配置服务器Config Server
这也是一种运行时技术。它可以在运行时刻,将应用所需的参数推送到应用中。
---------优缺点:
代码侵入,应用需要做相应的配置如指明configure server地址等
3)Maven Filter机制
Maven提供了一种过滤机制,可以在资源文件被复制到目标目录的同时,替换其中的placeholders。
---------优缺点:
这不是运行时机制,所以不够灵活
4)AutoConfig机制
这意味着该机制与应用所采用的技术、框架完全无关,对应用完全透明,具有良好的通用性。
同时,AutoConfig与运行时的配置技术并不冲突。它可以和运行时替换的placeholders以及中心配置服务器完美并存,互为补充。
--------------------------------------------------------------------------------------------------------------------------------
AutoConfig使用动机
1)autoconfig用户角色
开发者: 定义应用所需要的properties,及其限定条件
提供包含placeholders占位符的配置文件
部署者: 根据所定义的properties,提供符合限定条件的属性值。
调用AutoConfig来生成目标配置文件
所以看出来AutoConfig一般用于部署人员灵活的配置各类它们和应用的逻辑无关,只和当前环境、当前系统用户相关的参数
——举例:
开发者定义了一个property:
petstore.upload_dir
,限定条件为:“合法的文件系统的目录名”。
布署者取得petstore的二进制发布包,通过AutoConfig了解到,应用需要一个名为
petstore.upload_dir
目录名。
布署者便指定一个目录给petstore,该目录名的具体值可能因不同的系统而异。
AutoConfig会检验该值是否符合限定条件(是否为合法目录名),如果检验通过,就生成配置文件,并将其中的
${petstore.upload_dir}
替换成该目录名
从这个意义上讲,AutoConfig不应当被看成是一个build时的简单配置工具,而是一个“软件安装工具”。
和Maven Filtering不同的是,AutoConfig是针对目标文件的配置工具。因此AutoConfig关心的目录结构是目标文件的目录结构。
--------------------------------------------------------------------------------------------------------------------------------
AutoConfig使用方法
1)明确autoconfig配置的应用程序目录结构
AutoConfig是针对目标文件的配置工具。因此在使用中需要关注目标文件的目录结构。
-------war
创建war包的AutoConfig机制,关键在于创建war目标文件中的
/META-INF/autoconf/auto-config.xml
描述文件。
该描述文件对应的maven项目源文件为:
/src/main/webapp/META-INF/autoconf/auto-config.xml
。
-------jar
创建jar包的AutoConfig机制,关键在于创建jar目标文件中的
/META-INF/autoconf/auto-config.xml
描述文件。
该描述文件对应的maven项目源文件为:
/src/main/resources/META-INF/autoconf/auto-config.xml
。
-------AutoConfig也支持对普通文件目录进行配置。
2)auto-config.xml描述文件的编写
-------定义properties:properties的名称、描述、默认值、约束条件等信息;
-------指定包含placeholders的模板文件。
3)使用auto-config进行配置的属性的xml文件模板位置建议
4)如何调用AutoConfig完成配置?
-------在命令行上直接运行
-------在maven中调用AutoConfig plugin
pom.xml中的配置
-------------------------------------------------------------------------------------------------------------------------
AutoConfig文档