JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@xxx] will not be managed by Spring

在SpringBoot项目中遇到Mybatis日志显示SqlSession未注册同步的问题,实际上是由于事务管理方式导致的。当不在方法上添加@Transactional注解时,Spring不会管理事务。通过在方法上添加@Transactional,日志显示Spring开始管理SqlSession,确保事务的正常回滚。这种方法适用于包含多个SQL操作的方法,以简化事务管理。

1、报错场景

在搞SpringBoot项目的时候,把Mybatis打印日志的配置打开后,发现每条Sql打印的时候都会在前面打印如下的信息,强迫症受不了,得查查为什么;

Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@521978e4] was not registered for synchronization because synchronization is not active
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@5bb2b956] will not be managed by Spring
==>  Preparing: select * from xxx where xxx = ? and xxx = ?
==> Parameters: opHQA5gq2qfn1DRl069YOLv1Wv0Q(String), 0(Integer)
<==    Columns: xxx, xxx, xxx, xxx
<==        Row: xxx, xxx, xxx, xxx
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@521978e4]

前面打印的内容意思大概是:这次的SqlSession未注册进来,同步关着呢哎,所以你这玩意Spring不会管理的;

2、问题原因及解决办法

原因就是你现在这个事务吧,不是Spring管理着呢,是你的数据库插件Mybatis或者MybatisPlus给你管理呢,所以Spring给你温馨提醒了一下而已,又没有报错!但是,有一种情况,比如你的方法里面逻辑比较多,增删改查的SQL比较多的话,而你自己又不清楚事务怎么管理的话,推荐你把@Transactional给加到方法上面,让Spring接管起来当前的事务,将来报错更好回滚。

当你把@Transactional加到方法上面时;

@Override
@Transactional
public Boolean xxxx(String xxx, String xxx) {
    Txxx txxx = txxxMapper.xxx(xxx, Integer.parseInt(xxx));
    //...
    return true;
}

再次打印日志的话就变成了这样:

Creating a new SqlSession
Registering transaction synchronization for SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ba27661]
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@57d27e73] will be managed by Spring
==>  Preparing: select * from xxx where xxx = ? and xxx = ?
==> Parameters: opHQA5gq2qfn1DRl069YOLv1Wv1Q(String), 0(Integer)
<==    Columns: xxx, xxx, xxx, xxx
<==        Row: xxx, xxx, xxx, xxx
<==      Total: 1
Releasing transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ba27661]
Transaction synchronization committing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ba27661]
Transaction synchronization deregistering SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ba27661]
Transaction synchronization closing SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3ba27661]

能看见Spring已经will be managed by Spring帮你管理了;

Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@197f0880] was not registered for synchronization because synchronization is not active 2025-06-05 10:12:17.312 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42435 2025-06-05 10:12:17.313 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42443 2025-06-05 10:12:17.314 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42445 2025-06-05 10:12:17.314 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42451 2025-06-05 10:12:17.314 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42453 2025-06-05 10:12:17.316 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42461 2025-06-05 10:12:17.316 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42462 2025-06-05 10:12:17.317 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42465 2025-06-05 10:12:17.320 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42470 2025-06-05 10:12:17.321 ERROR 24008 --- [nio-8080-exec-6] c.a.druid.pool.DruidAbstractDataSource : discard long time none received connection. , jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, jdbcUrl : jdbc:mysql://localhost:3306/car?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&autoReconnect=true, lastPacketReceivedIdleMillis : 42475 JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@59f7e6a3] will not be managed by Spring ==> Preparing: SELECT id,username,phone,license_plate,user_password,yn,create_time,update_time FROM tb_user WHERE (phone = ?) ==> Parameters: 18555522072(String) <== Columns: id, username, phone, license_plate, user_password, yn, create_time, update_time <== Row: 2, 李华, 18555522072, 1234, 1234, null, 2025-04-16 09:49:06, 2025-04-17 11:00:37 <== Total: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@197f0880] 2025-06-05 10:12:17.461 INFO 24008 --- [nio-8080-exec-6] c.z.c.demo.aspect.OpenApiCatchAspect : 接口请求方法=AuthController login, 请求参数=[{"password":"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4","phone":"18555522072"}], 返回={"success":true}, 用时=238ms Creating a new SqlSession SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c0ea46] was not registered for synchronization because synchronization is not active JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@59f7e6a3] will not be managed by Spring ==> Preparing: SELECT id,username,phone,license_plate,user_password,yn,create_time,update_time FROM tb_user WHERE (phone = ?) ==> Parameters: 18555522072(String) <== Columns: id, username, phone, license_plate, user_password, yn, create_time, update_time <== Row: 2, 李华, 18555522072, 1234, 1234, null, 2025-04-16 09:49:06, 2025-04-17 11:00:37 <== Total: 1 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4c0ea46] 2025-06-05 10:12:18.087 INFO 24008 --- [nio-8080-exec-7] c.z.c.demo.aspect.OpenApiCatchAspect : 接口请求方法=AuthController login, 请求参数=[{"password":"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4","phone":"18555522072"}], 返回={"success":true}, 用时=0ms
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cgv3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值