問題:
有些參數在某些階段中是常量,這些參數在不同階段之間又往往需要改變,如:
-
- 在開發階段我們連接數據庫時的url,username,password等信息
- 分布式應用中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>