2010-11-16 59 views
3

在这一刻,我使用带有@Transactional批注的DriverManagerDataSource来管理事务。但所有事务都非常缓慢,可能是因为数据源每次都打开和关闭与db的连接。为休眠和@Transactional配置spring数据源

我应该使用什么数据源来加速交易?

回答

4

DriverManagerDataSource实际上并不是连接池,只能用于测试。你应该从Apache Commons DBCP尝试BasicDataSource。类似于:

<bean id="dataSource" destroy-method="close" 
    class="org.apache.commons.dbcp.BasicDataSource"> 
    <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> 
+0

谢谢,现在速度非常快。 – blow 2010-11-16 15:40:00

8

我正在使用两种方法的应用程序组合。第一个是c3p0连接池,它与chkal的吞吐量几乎相同。第二种方法是使用Spring lazyConnectionDataSourceProxy,它创建延迟加载代理,该代理仅在您访问数据库时加载连接。这是非常有用的,当你有二级缓存,而且你只是在读缓存的数据和查询时 - 数据库不会被击中,并且你不需要获取连接(这非常昂贵)。

<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 
    <property name="driverClass" value="${jdbc.driverClassName}" /> 
    <property name="jdbcUrl" value="${jdbc.url}" /> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <!-- Pool properties --> 
    <property name="minPoolSize" value="5" /> 
    <property name="initialPoolSize" value="10" /> 
    <property name="maxPoolSize" value="50" /> 
    <property name="maxStatements" value="50" /> 
    <property name="idleConnectionTestPeriod" value="120" /> 
    <property name="maxIdleTime" value="1200" /> 

</bean> 

<bean name="lazyConnectionDataSourceProxy" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"> 
    <property name="targetDataSource" ref="dataSource" /> 
</bean> 
+1

comboPooledDatasource缺少destroy-method =“close”属性 – malejpavouk 2010-11-16 11:42:32