你好,想請教個問題: 剛才拜讀了下 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();
}
}感覺無法做到事務的統一控制,例如第一個數據源正常提交后,第二個數據源提交事務時出現異常時,是不能夠回滾第一個數據源的事務的。后經測試也證明確實無法回滾。
添加回答
舉報
0/150
提交
取消