2010-11-16 142 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