ibatis 提示 will not be managed by Spring
使用ibatis做查詢(xún),一切功能正確運(yùn)行 ,但是更新報(bào)如下提示:
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 作為入口追蹤。本次查詢(xún)結(jié)果為list,所以在selectList中打個(gè)斷點(diǎn)
通過(guò)向上定位:
DefaultSqlSession ->SqlSessionTemplate->SqlSessionUtils發(fā)現(xiàn)打印了一句日志: Creating a new SqlSession
對(duì)于日志應(yīng)該有這樣的敏感:我開(kāi)啟了這個(gè)框架的這個(gè)級(jí)別的日志了嗎?由于歷史的原因,不同的框架使用不同的日志,此處不展開(kāi)。
經(jīng)診斷確實(shí)是開(kāi)啟了,由于開(kāi)啟了ibatis 的日志框架,與spring的日志框架就兩套并存,在操作sqlSession的時(shí)候使用ibatis的,并沒(méi)有發(fā)送到spring的日志中,導(dǎo)致這種問(wèn)題。
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
如何驗(yàn)證?
回顧日志提示,發(fā)現(xiàn)synchronization,一般都是和事務(wù)相關(guān),我們不妨在查詢(xú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]
開(kāi)啟后被spring管理的,可以推斷出原來(lái)沒(méi)有事務(wù),壓根不需要被spring管理。