2016-02-09 1 views
1

У меня проблемы с myBatis. Я вижу серьезную деградацию производительности на транзакционных методах (и даже, не транзакционный) после включения менеджера транзакций весной:Медленное закрытие SqlSession в myBatis с пружиной

<tx:annotation-driven transaction-manager="transactionManager"/> 

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="url" value="${database.url}"/> 
    <property name="driverClassName" value="${database.driver}" /> 
    <property name="username" value="${database.user}" /> 
    <property name="password" value="${database.password}" /> 
</bean> 

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="typeAliasesPackage" value="com.company.model" /> 
</bean> 

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <property name="basePackage" value="com.company.mapper" /> 

</bean> 

Войти, например, как вы можете видеть, что есть около 150 миллисекунд между закрытием и началом новой транзакции.

09:28:58.134 [http-bio-9081-exec-12] DEBUG o.m.s.SqlSessionUtils - Closing non transactional SqlSession [[email protected]] 
09:28:58.297 [http-bio-9081-exec-3] DEBUG o.m.s.SqlSessionUtils - Creating a new SqlSession 

База данных: Oracle 11.2 Спасибо.

+1

Вы используете источник BasicDataSource. Я бы посмотрел на объединение пулов, если вы беспокоитесь о производительности. Существуют различные библиотеки, которые могут помочь в этом, эта статья объясняет использование c3p0, но может быть немного устаревшим. Должна дать вам эту идею. http://www.raistudies.com/spring/integrating-mybatis-3-and-spring-frameworks-part-2/ –

+0

Я включил BoneCP в качестве объединенного источника данных, но mybatis независимо от того, какой вызов выбирается последовательно с большой задержкой между транзакциями. –

+0

Я бы не назвал 150 мс большой задержкой. Сколько транзакций вы используете для каждого запроса? Если у вас была отдельная транзакция для каждого выбора, тогда 150 мс могут начать складываться, но вы, вероятно, должны объединить их в одну транзакцию. –

ответ

0

Причина была глупа. Это была деградация базы данных.