[spring]<context:property-placeholder/>

问题:

有些参数在某些阶段中是常量,这些参数在不同阶段之间又往往需要改变,如:

    1. 在开发阶段我们连接数据库时的url,username,password等信息
    2. 分布式应用中client端的server地址,端口等

解决方案:

Spring3中我们可以使用spring3中提供的<context:property-placeholder/>,在数据库配置文件中可以这样写:

1.配置数据库相关参数

 

<context:property-placeholder location="classpath:jdbc.properties" ignore-unresolvable="true"/>

或者Spring 2.5:

<bean id="propertyPlaceholderConfigurer" class="org.springframework,beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations" value="classpath:jdbc.properties"/> 
<property name="ignoreUnresolvablePlaceholders" value="true" /> 
</bean>

 ignore-unresolvable="true"

  如果不加会报错:Could not resolve placeholder...

   原因是因为:spring容器只会维护一个PropertyPlaceholderConfigurer的bean实例,当spring发现容器中有一个该实例后,就会忽略其余的,所以,该标签只能配置一个,多余的spring会自动忽略。

   在spring2.5中可使用:

 

<property name="ignoreUnresolvablePlaceholders" value="true" />

 

2.jdbc.properties:

jdbc.driverClassName=org.postgresql.Driver
jdbc.urlSaas=jdbc:postgresql://180.96.28.100/db
jdbc.usernameSaas=test
jdbc.passwordSaas=1

druid.pool.size.max=20
druid.pool.size.min=3
druid.pool.size.init=3
  
3.配置数据源

  

<bean id="dataSourceSaasdb" class="com.alibaba.druid.pool.DruidDataSource" 
            init-method="init" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}" />
        <property name="url" value="${jdbc.urlSaas}" />
        <property name="username" value="${jdbc.usernameSaas}" />
        <property name="password" value="${jdbc.passwordSaas}" />
        <!-- 配置初始化大小、最小、最大 -->  
        <property name="initialSize" value="${druid.pool.size.init}" />  
        <property name="minIdle" value="${druid.pool.size.min}" />   
        <property name="maxActive" value="${druid.pool.size.max}" />  
        <!-- 配置监控统计拦截的filters,wall用于防止sql注入,stat用于统计分析 -->
        <property name="filters" value="wall,stat" /> 
</bean>

 

posted @ 2018-08-23 10:02  vickylinj  阅读(1837)  评论(0编辑  收藏  举报