在這一刻,我使用帶有@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