• 几种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

  • 相关阅读:
    Gridview利用DataFormatString属性设置数据格式
    PowerDesigner15 逆向工程
    JS实现动态显示当前时间(12/24小时制)(转载Mr.Think)
    如何判断Javascript对象是否存在
    PHP学习(一):判断数组中的值是否包含某字符
    JavaScript显示剩余时间
    Hibernate:a different object with the same identifier value was already associated wit异常解决
    excel含文字求和
    excel去掉最高分
    excel保护
  • 原文地址:https://www.cnblogs.com/xujanus/p/4662181.html
Copyright © 2020-2023  润新知