偶发spring事务无法释放资源No value for key [] bound to thread

使用shardingjdbc本地事务,数据正常插入数据库,但是在最后释放资源的时候报错No value for key [当前数据源] bound to thread,导致接下来的业务流程无法执行。这个问题不是百分百出现的,只是偶发现象。
我的业务方法及事务使用如下:
@Transactional(rollbackFor = Exception.class)
 @ShardingTransactionType(TransactionType.LOCAL)
public void insertInfo(){
  //保存第一张表数据
  //保存第二张表数据
}
查看堆栈发现是在commit之后清理资源的unbindResource这个方法中根据key获取不到value报错:
TransactionSynchronizationManager.unbindResource(TransactionSynchronizationManager.java:213)
    at org.springframework.jdbc.datasource.DataSourceTransactionManager.doCleanupAfterCompletion(DataSourceTransactionManager.java:367)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.cleanupAfterCompletion(AbstractPlatformTransactionManager.java:1007)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:793)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:714)
public static Object unbindResource(Object key) throws IllegalStateException {
        Object actualKey = TransactionSynchronizationUtils.unwrapResourceIfNecessary(key);
        Object value = doUnbindResource(actualKey);
        if (value == null) {
            throw new IllegalStateException(
                    "No value for key [" + actualKey + "] bound to thread [" + Thread.currentThread().getName() + "]");
        }
        return value;
    }
项目中用到了shardingjdbc做分库操作,该业务方法数据只会进入同一个库中, 盼解答,感谢。

你们是自己改写了什么东西吧,正常情况下当前事务需要提交,提交完以后才会去解除绑定,

img

数据源和ConnectionHolder的映射关系,如果是采用容器注入一个数据源,数据源内部自己手动切换到具体的代理数据源的方式,应该是不会出现这种情况的

img

解决了吗?老哥,碰到跟你一样的问题