2016-02-09 23 views
1

我對myBatis有麻煩。我查看啓用事務管理器在開春後的交易方法(甚至非事務性)嚴重的性能下降:在myBatis中緩慢關閉SqlSession與彈簧

<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無論哪種調用選擇sequentualy,並且在事務之間有很大的延遲。 –

+0

我不會叫150ms大拖延。每次請求使用多少次交易?如果每個選擇都有單獨的交易,那麼150毫秒可能會開始累加,但您應該將它們合併爲一個交易。 –

回答

0

原因很蠢。這是數據庫退化。