ソースを参照

添加事务函数,支持定制事务行为

James 3 年 前
コミット
2eea5551a4
1 ファイル変更26 行追加2 行削除
  1. 26 2
      src/main/java/com/jfinal/plugin/activerecord/tx/TxFun.java

+ 26 - 2
src/main/java/com/jfinal/plugin/activerecord/tx/TxFun.java

@@ -18,13 +18,37 @@ package com.jfinal.plugin.activerecord.tx;
 
 import com.jfinal.aop.Invocation;
 import java.sql.Connection;
+import java.sql.SQLException;
 
 /**
- * 支持定制事务行为
+ * 支持定制事务行为,否则 Tx 拦截器只会在抛出异常时回滚事务
+ *
+ * <pre>
+ * 例如通过返回值 Ret 对象来决定事务的提交与回滚:
+ *   Tx.setTxFun((inv, conn) -> {
+ *       inv.invoke();
+ *
+ *       // 根据业务层返回值 Ret 对象的状态决定提交与回滚
+ *       Object retValue = inv.getReturnValue();
+ *       if (retValue instanceof Ret) {
+ *           Ret ret = (Ret)retValue;
+ *           if (ret.isOk()) {
+ *               conn.commit();
+ *           } else {
+ *               conn.rollback();
+ *           }
+ *           return ;
+ *       }
+ *
+ *       // 返回其它类型值的情况
+ *       conn.commit();;
+ *    });
+ * </pre>
  */
 @FunctionalInterface
 public interface TxFun {
-    void call(Invocation inv, Connection conn);
+    void call(Invocation inv, Connection conn) throws SQLException;
 }
 
 
+