@Dreampie 你好,想跟你请教个问题:
刚才拜读了下resty的源码,看到关于多数据源事物控制实现的核心是如下的(TransactionAspect类中):
for (int i = 0; i < names.length; i++) { dataSourceMeta = Metadata.getDataSourceMeta(names[i]); dataSourceMeta.initTransaction(readonlys.length == 1 ? readonlys[0] : readonlys[i], levels.length == 1 ? levels[0] : levels[i]); dataSourceMetas.add(dataSourceMeta); } //执行操作 result = ih.invoke(proxy, method, args); for (DataSourceMeta dsm : dataSourceMetas) { dsm.commitTransaction(); } } catch (Throwable t) { for (DataSourceMeta dsm : dataSourceMetas) { dsm.rollbackTransaction(); } String message = t.getMessage(); Throwable cause = t.getCause(); if (message == null) { if (cause != null) { message = cause.getMessage(); } }感觉无法做到事务的统一控制,例如第一个数据源正常提交后,第二个数据源提交事务时出现异常时,是不能够回滚第一个数据源的事务的。后经测试也证明确实无法回滚。
理论上也不行啊,除非模式是像xa协议那样,有两段提交,要不然你不知道另一个事务是否会错误。