你的位置:首页 > Java教程

[Java教程]几种placeholder替换项目参数的方法比较


引言:(引自:http://openwebx.org/docs/autoconfig.html)

在一个应用中,我们总是会遇到一些参数,例如:

  • 数据库服务器IP地址、端口、用户名;

  • 用来保存上传资料的目录。

  • 一些参数,诸如是否打开cache、加密所用的密钥名称等等。


这些参数有一个共性,那就是:它们和应用的逻辑无关,只和当前环境、当前系统用户相关。以下场景很常见:

  • 在开发、测试、发布阶段,使用不同的数据库服务器;

  • 在开发阶段,使用Windows的A开发者将用户上传的文件存放在d:\my_upload目录中,而使用Linux的B开发者将同样的文件存放在/home/myname/my_upload目录中。

  • 在开发阶段设置cache=off,在生产环境中设置cache=on


很明显,这些参数不适合被“硬编码”在配置文件或代码中。因为每一个从源码库中取得它们的人,都有可能需要修改它们,使之与自己的环境相匹配

......

很多框架支持使用placeholder占位符替换配置文件中的参数,然后在运行期或者编译器读取properties文件,完成动态配置。最近刚好研究了几种使用占位符替换配置的方法,故在此做个比较和总结: 

-------------------------我是分割线----------------------------

1.使用spring自带的实体类来配置参数

Spring的框架中为您提供了一个 BeanFactoryPostProcessor 的实作类别: org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。藉由这个类别,您可以将一些组态设定,移出至.properties档案中,如此的安排可以让

  <!--参数配置,参数过滤,使用properties替换占位符 -->       <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    <property name="locations">      <list>        <value>classpath:config/spring-daily.properties</value>      </list>    </property>  </bean>

 

2.使用maven自带的build设置来实现参数过滤

这是通过在build节点中添加filter和resource来实现的,在<build>标签下有一个<filters>标签,用于定义指定filter属性的位置,例如filter元素赋值filters/filter1.properties,那么这个文件里面就可以定义name=value对,这个name=value对的值就可以在工程pom中通过${name}引用,默认的filter目录是${basedir}/src/main/fiters/

  <filters>     <filter>src/main/filters/filter-${env}.properties</filter>   </filters>   <resources>     <resource>       <directory>src/main/resources</directory>       <filtering>true</filtering>     </resource>    </resources>

  

3.使用maven的插件maven-war-plugin来实现参数过滤

使用maven-war-plugin这个插件可以在执行打包命令的时候指定我要打哪个环境的包(具体方法不在这里展开讲),使用上比maven原生的filter机制要方便,功能也更强大

<filters>   <filter> src/main/resources/IProject-test.properties </filter> </filters> <plugin>   <groupId>org.apache.maven.plugins</groupId>   <artifactId>maven-war-plugin</artifactId>   <configuration>     <webResources>       <resource>         <directory>src/main/packageFilter</directory>         <filtering>true</filtering>         <targetPath>WEB-INF</targetPath>       </resource>     </webResources>   </configuration> </plugin> 

 

4.使用AutoConfig插件来实现参数过滤

AutoConfig是一种类似于Maven Filtering的工具。是阿里开发的,一款功能强大的参数过滤插件,具体功能和使用方法不在这里展开讲,想要进一步了解的去这里:http://openwebx.org/docs/autoconfig.html

 

-------------------------我是分割线----------------------------

4种参数过滤方式的比较:

方法

优点

缺点

替换参数的时期

上手难度

功能性

Spring插件

速度快

配置简单

只能针对spring的bean起作用,其它配置内容无法过滤

运行时

Maven原生设置

Maven自带功能,不需要额外的插件

资源文件被复制到目标目录时才起作用

功能偏弱

build时

偏弱

maven-war-plugin插件

可以针对多套环境进行设置

覆盖原文件

配置灵活

满足大部分需求

缺少验证机制

Build时期才执行因此速度较慢

 

build时

AutoConfig插件

有验证机制;

功能强大

针对配置文件,不需要打包,因此不需要项目源代码文件

教程较少

上手较难

build时

最复杂

最强

 

参考资料:

http://www.cnblogs.com/qq78292959/p/3711501.html

http://lishuaibt.iteye.com/blog/614783

http://nileader.blog.51cto.com/1381108/449956

http://openwebx.org/docs/autoconfig.html

 




四川旅游多少钱四川旅游攻略大全四川旅游攻略自助游四川旅游报价价格四川旅游景点推荐2015番禺美食节举办多久?广州番禺美食节到什么时候? 2015广州番禺美食节有什么好吃的?番禺美食节特色? 2015沙湾音乐节举办地点?广州沙湾音乐节在哪里举办? 2015番禺音乐节好玩吗?广州番禺音乐节有什么好玩的? 2015珠海元宵节哪里有灯会?珠海元宵节去哪玩? 2015珠海元宵节活动哪里有?珠海元宵节活动介绍? 2015广州花灯节什么时候?广州花灯节有什么好玩的? 清晨的水乡周庄 犹如一幅天然的水墨画 森波拉在什么地方?森波拉温泉度假村位置? 去牡丹江攀威虎山赏五花山(组图) 秋游牡丹江 两条受驴友欢迎的路线推荐(图) 泰安不止有泰山 盘点泰安好玩的景区 去迪拜旅游需要带什么? 教师节的来历,你知道世界各国教师节的来历吗? 泰国曼谷九月份天气如何?穿什么衣服好? 去泰国曼谷带小孩适合去哪里玩? IDT72V3640L7-5PF Datasheet IDT72V3640L7-5PF Datasheet IDT71V3558S200PF Datasheet IDT71V3558S200PF Datasheet IDT72V3640L7-5PF8 Datasheet IDT72V3640L7-5PF8 Datasheet 浙江到港澳5天游 浙江到港澳5天游 浙江到港澳5天游 吉林到香港3天旅游 吉林到香港3天旅游 吉林到香港3天旅游 齐齐哈尔跟团香港三天两晚游 齐齐哈尔跟团香港三天两晚游 齐齐哈尔跟团香港三天两晚游