在使用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会被加载到上下文中。