Настроить источник данных Spring для Hibernate и @Transactional - PullRequest
3 голосов
/ 16 ноября 2010

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

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

Ответы [ 2 ]

8 голосов
/ 16 ноября 2010

Я использую в своем приложении комбинацию двух подходов.Первый - это пул соединений c3p0, это почти то же решение, что и chkal sugested.Второй подход заключается в использовании 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>
4 голосов
/ 16 ноября 2010

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>
...