首页 » java

JDBC Connection [xxx] will not be managed by Spring

   发表于:java评论 (0)   热度:1129

 springboot MyBatis 错误提示

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

 使用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

我们可以已有的信息调用追踪:其中可以使用DefaultSqlSession 作为入口追踪。本次查询结果为list,所以在selectList中打个断点

通过向上定位:

DefaultSqlSession ->SqlSessionTemplate->SqlSessionUtils发现打印了一句日志: Creating a new SqlSession

对于日志应该有这样的敏感:我开启了这个框架的这个级别的日志了吗?由于历史的原因,不同的框架使用不同的日志,此处不展开。

经诊断确实是开启了,由于开启了ibatis 的日志框架,与spring的日志框架就两套并存,在操作sqlSession的时候使用ibatis的,并没有发送到spring的日志中,导致这种问题。

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

如何验证?

回顾日志提示,发现synchronization,一般都是和事务相关,我们不妨在查询中添加事务@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管理的,可以推断出原来没有事务,压根不需要被spring管理。

(。・v・。)
喜欢这篇文章吗?欢迎分享到你的微博、QQ群,并关注我们的微博,谢谢支持。