1. 程式人生 > >spring中"Closing non transactional SqlSession"的處理

spring中"Closing non transactional SqlSession"的處理

    在我們沒有開啟事務的時候,如果使用mybatis,我們會在日誌中看到如下的內容:"Closing non transactional SqlSession",這種情況說明沒有開啟Spring的事務管理,因此才會關閉一個非事務的SqlSession。

  那麼如何開啟事務管理呢?最簡單的方式就是新增下面兩條配置:

 <!-- 配置事務管理器 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
          p:dataSource-ref="dataSource" />

    <!-- 指明使用註解的方式來管理事務 -->
    <tx:annotation-driven transaction-manager="transactionManager" />

然後我們在需要加事務管理的Service中新增@Transactional註解,我們就會在日誌中看到如下效果了:
Releasing transactional SqlSession [[email protected]]
[DEBUG][2017/08/22 10:38:34132][org.mybatis.spring.SqlSessionUtils$SqlSessionSynchronization.beforeCommit(SqlSessionUtils.java:284)]
Transaction synchronization committing SqlSession [[email protected]
] [DEBUG][2017/08/22 10:38:34132][org.mybatis.spring.SqlSessionUtils$SqlSessionSynchronization.beforeCompletion(SqlSessionUtils.java:310)] Transaction synchronization deregistering SqlSession [[email protected]] [DEBUG][2017/08/22 10:38:34133][org.mybatis.spring.SqlSessionUtils$SqlSessionSynchronization.beforeCompletion(SqlSessionUtils.java:315)] Transaction synchronization closing SqlSession [
[email protected]
] [DEBUG][2017/08/22 10:38:34133][org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:759)] Initiating transaction commit