你好,想请教个问题:
刚才拜读了下 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(); } }
感觉无法做到事务的统一控制,例如第一个数据源正常提交后,第二个数据源提交事务时出现异常时,是不能够回滚第一个数据源的事务的。后经测试也证明确实无法回滚。
临摹微笑
撒科打诨