在这一刻,我使用带有@Transactional批注的DriverManagerDataSource来管理事务。但所有事务都非常缓慢,可能是因为数据源每次都打开和关闭与db的连接。为休眠和@Transactional配置spring数据源
我应该使用什么数据源来加速交易?
在这一刻,我使用带有@Transactional批注的DriverManagerDataSource来管理事务。但所有事务都非常缓慢,可能是因为数据源每次都打开和关闭与db的连接。为休眠和@Transactional配置spring数据源
我应该使用什么数据源来加速交易?
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>
我正在使用两种方法的应用程序组合。第一个是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>
comboPooledDatasource缺少destroy-method =“close”属性 – malejpavouk 2010-11-16 11:42:32
谢谢,现在速度非常快。 – blow 2010-11-16 15:40:00