Browse Source

修改事务处理函数panic的bug

yjp 3 months ago
parent
commit
da949ec914
1 changed files with 11 additions and 2 deletions
  1. 11 2
      framework/core/infrastructure/database/database.go

+ 11 - 2
framework/core/infrastructure/database/database.go

@@ -45,7 +45,7 @@ const (
 // - txFunc: 事务函数
 // 返回值:
 // - 错误
-func Transaction(executor Executor, txFunc func(tx Executor) error) error {
+func Transaction(executor Executor, txFunc func(tx Executor) error) (err error) {
 	if executor == nil {
 		return nil
 	}
@@ -57,11 +57,20 @@ func Transaction(executor Executor, txFunc func(tx Executor) error) error {
 	switch e := executor.(type) {
 	case *operations.Operations:
 		tx := e.BeginTransaction()
-		err := txFunc(tx)
+
+		defer func() {
+			if r := recover(); r != nil {
+				tx.RollbackTransaction()
+				err = errors.Errorf("panic: %v", r)
+			}
+		}()
+
+		err = txFunc(tx)
 		if err != nil {
 			tx.RollbackTransaction()
 			return err
 		}
+
 		tx.CommitTransaction()
 	default:
 		return nil