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 Спасибо.
Вы используете источник BasicDataSource. Я бы посмотрел на объединение пулов, если вы беспокоитесь о производительности. Существуют различные библиотеки, которые могут помочь в этом, эта статья объясняет использование c3p0, но может быть немного устаревшим. Должна дать вам эту идею. http://www.raistudies.com/spring/integrating-mybatis-3-and-spring-frameworks-part-2/ –
Я включил BoneCP в качестве объединенного источника данных, но mybatis независимо от того, какой вызов выбирается последовательно с большой задержкой между транзакциями. –
Я бы не назвал 150 мс большой задержкой. Сколько транзакций вы используете для каждого запроса? Если у вас была отдельная транзакция для каждого выбора, тогда 150 мс могут начать складываться, но вы, вероятно, должны объединить их в одну транзакцию. –