@Transactional(rollbackFor = Exception.class)
@ShardingTransactionType(TransactionType.LOCAL)
public void insertInfo(){
//保存第一张表数据
//保存第二张表数据
}
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;
}
你们是自己改写了什么东西吧,正常情况下当前事务需要提交,提交完以后才会去解除绑定,
数据源和ConnectionHolder的映射关系,如果是采用容器注入一个数据源,数据源内部自己手动切换到具体的代理数据源的方式,应该是不会出现这种情况的
解决了吗?老哥,碰到跟你一样的问题