問題:發現剛剛發布的spring應用程序經常出現獲取不到數據庫連接的timeout 錯誤。仔細看代碼后發現,有段代碼需要連續發起兩個query,常常是發第二個query時出現數據庫連接獲取不到的錯誤
原因:仔細讀了spring文檔,發現由于使用的datasource是Spring提供的DriverManagerDataSource
,而該dataSource是不支持Connection Pool的,所以性能很低,Spring也是推薦不要采用這個dataSource。改用Apache的DBCP dataSource后解決該問題。
修改配置:
bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="jdbc.properties"/>
參考:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/jdbc.html#jdbc-DataSourceTransactionManager