2010-11-16 2 views
3

В данный момент я использую DriverManagerDataSource с аннотацией @Transactional для управления транзакциями. Но все транзакции очень медленные, возможно, потому что источник данных открывает и закрывает соединение с db каждый раз.Настроить источник весны для спящего режима и @Transactional

Какой источник данных следует использовать для ускорения транзакции?

ответ

4

DriverManagerDataSource не является пулом соединений и должен использоваться только для тестирования. Вы должны попробовать BasicDataSource от Apache Commons DBCP. Что-то вроде:

<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

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

атрибут destroy-method = "close" отсутствует для comboPooledDatasource – malejpavouk

Смежные вопросы