问题:发现刚刚发布的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