您的位置:首页 > 运维架构

PropertyPlaceholderConfigurer的使用

2017-03-05 10:35 537 查看
在使用SpringMVC做Web开发的时候,为了便于统一管理配置项,常常会看到用占位符的配置方式。这样,可以将分散在spring配置文件中的配置项的值集中到一个(多个)属性文件中,方便管理。

配置spring加入properties文件的位置。通过配置PropertyPlaceholderConfigurer的bean实现

    <!-- 定义受环境影响易变的变量 -->
    <beanid="propertyPlaceHolder"
       class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <propertyname="systemPropertiesModeName"value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
       <propertyname="ignoreResourceNotFound"value="true"/>
       <propertyname="locations">
           <list>
              <!--通配符说明见文章底部-->
              <value>classpath*:config/dev/schedule.xml</value>
              <value>classpath*:config/dev/cron.properties</value>
           </list>
       </property>
    </bean>

schedule.xml的内容:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEpropertiesSYSTEM"http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>MyProject PropertiesXML</comment>
    <!-- 以下是Hibernate配置-->
    <entrykey="hibernate.dialect">com.iflytek.sgy.yzt.schedule.support.SystemOracle10gDialect</entry>
    <entrykey="hibernate.show_sql">false</entry>
    <entrykey="hibernate.format_sql">false</entry>
    <entrykey="hibernate.ehcache_config_file">/ehcache/ehcache-hibernate-local.xml</entry>
 
    <!-- 日志配置 -->
    <entrykey="log-level">info</entry>
    <entrykey="log-filepath">/myProject.log</entry>
   
    <!--    数据源参数配置 --> 
    <entrykey="database.driver.class.name">oracle.jdbc.pool.OracleConnectionPoolDataSource</entry>
    <entrykey="database.url">实际值</entry>
    <entrykey="database.username">实际值</entry>
    <entrykey="database.password">实际值</entry>
    <entrykey="database.validation.query">select 1 from dual</entry>
   
</properties>

 

cron.properties内容是quzrtz定时器的任务设定时间(有想了解的道友可以参考http://blog.csdn.net/wu020708/article/details/60144961):

cronExpression.DataSendJob=0/30**
* *
?
cronExpression.DataReceiveJob=*
0/1 * **?

定一个bean使用properties:

    <beanid="yztDataSource"class="org.apache.commons.dbcp.BasicDataSource"
       destroy-method="close">
       <propertyname="driverClassName"value="${database.driver.class.name}"/>
       <propertyname="url"value="${database.url}"/>
       <propertyname="username"value="${database.username}"/>
       <propertyname="password"value="${database.password}"/>
       <propertyname="validationQuery"value="${database.validation.query}"/>

</bean>

 

Spring的Ant模式通配符匹配,从能一个路径匹配一批资源。

       Ant路径通配符支持“?”、“*”、“**”,注意通配符匹配不包括目录分隔符“/”:

         “?”:匹配一个字符,如“config?.xml”将匹配“configA.xml”;

         “*”:匹配零个或多个字符串,如“com/*/config.xml”将匹配“com/wu/config.xml”,但不匹配匹配“com/config.xml”;而“com/config*.xml”将匹配“com/configAnyNane.xml”;

         “**”:匹配路径中的零个或多个目录,如“com/**/config.xml”将匹配“com /config.xml”,也匹配“com/my/pro/config.xml”;而“com/my/config**.xml”将匹配“com/my/configAnyName.xml”,即把“**”当做两个“*”处理。

classpath 和 classpath* 区别:classpath:只会到你指定的class路径中查找找文件;classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找.

web.xml中定义:classpath*:META-INF/spring/application-context.xml

那么在META-INF/spring这个文件夹底下的所有application-context.xml都会被加载到上下文中,这些包括META-INF/spring文件夹底下的 application-context.xml,META-INF/spring的子文件夹的application-context.xml以及jar中的application-context.xml;

如果在web.xml中定义的是:classpath:META-INF/spring/application-context.xml

那么只有META-INF/spring底下的application-context.xml会被加载到上下文中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息