ibatis 提示 will not be managed by Spring
使用ibatis做查詢,一切功能正確運行 ,但是更新報如下提示:
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4f9e6460] was not registered for synchronization because synchronization is not active
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@1079fd8b] will not be managed by Spring
我們可以已有的信息調(diào)用追蹤:其中可以使用DefaultSqlSession 作為入口追蹤。本次查詢結(jié)果為list,所以在selectList中打個斷點
通過向上定位:
DefaultSqlSession ->SqlSessionTemplate->SqlSessionUtils發(fā)現(xiàn)打印了一句日志: Creating a new SqlSession
對于日志應(yīng)該有這樣的敏感:我開啟了這個框架的這個級別的日志了嗎?由于歷史的原因,不同的框架使用不同的日志,此處不展開。
經(jīng)診斷確實是開啟了,由于開啟了ibatis 的日志框架,與spring的日志框架就兩套并存,在操作sqlSession的時候使用ibatis的,并沒有發(fā)送到spring的日志中,導(dǎo)致這種問題。
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
如何驗證?
回顧日志提示,發(fā)現(xiàn)synchronization,一般都是和事務(wù)相關(guān),我們不妨在查詢中添加事務(wù)@Transactional(rollbackFor = Exception.class)看看
Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7878c4fb]
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@53489f9] will be managed by Spring
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7878c4fb]
Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7878c4fb]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7878c4fb]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7878c4fb]
開啟后被spring管理的,可以推斷出原來沒有事務(wù),壓根不需要被spring管理。