yaml核心配置如下(参考mp的dynamic的官方文档)
seata:
enable-auto-data-source-proxy: false
spring:
datasource:
dynamic:
primary: master
strict: true
#开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
seata: true
#支持XA及AT模式,默认AT
seata-mode: AT
实现层代码如下(执行mp的批量)
@Log4j2
@Service
public class TestInfoCustom3541ServiceImpl extends ServiceImpl<TestInfoMapper, TestInfo> implements TestInfoService {
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public void doBatch() {
List<TestInfo> addList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
TestInfo testInfo = new TestInfo();
testInfo.setTitle("批量测试标题-" + i)
.setIsDeleted(true);
addList.add(testInfo);
# 单条执行(无事务)
//this.save(testInfo);
}
# mp自带了 @Transactional(rollbackFor = Exception.class)
this.saveBatch(addList);
throw new CustomClientException("主动抛出异常测试");
}
}
在不增加额外配置的情况下,mp的批量操作一直都无法回滚,且日志中存在如下警告
WARN-> union.system.test.service.impl.TestInfoCustom3541ServiceImpl.executeBatch[189]-> SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@749ad02c] Transaction not enabled
如果是单条单条的save,则不会有任何问题。基于seata,官方也说和ORM层框架是不会影响的。dynamic-datasource官方文档也没有更多的说明,搜索目前也更多是说多数据源问题,参考调整了下,有些直接没法起,有些结果还是一样,不是很懂这方面,有没有大佬能解答一下
尝试更换一下这个呢