spring中"Closing non transactional SqlSession"的處理
阿新 • • 發佈:2018-12-31
在我們沒有開啟事務的時候,如果使用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