当前位置: 代码迷 >> Java相关 >> 几种placeholder轮换项目参数的方法比较
  详细解决方案

几种placeholder轮换项目参数的方法比较

热度:82   发布时间:2016-04-22 19:56:16.0
几种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档案中,如此的安排可以让XML定义档负责系统相关设定,而.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

 

  相关解决方案