流程事务
事务简介
数据库事务是指一组操作的集合,这些操作要么全部成功,要么全部失败。事务具有四个关键特性,通常称为 ACID 属性:
- 原子性(Atomicity):事务是不可分割的最小执行单位,要么全部执行,要么全部不执行。
- 一致性(Consistency):事务执行前后,数据库保持一致状态。
- 隔离性(Isolation):并发执行的事务彼此隔离,互不影响。
- 持久性(Durability):事务一旦提交,其结果是永久性的,即使系统崩溃也不会丢失。
事务必须在同一个执行体中
事务通常需要在同一个执行体中进行管理,比如在一次数据库连接或会话中。原因包括:
- 一致性:在同一个执行体中,数据库可以确保事务的完整性和一致性。
- 锁管理:事务需要在同一个连接中管理锁,以避免资源冲突和死锁。
- 资源管理:同一执行体中更容易管理和释放资源,如连接和内存。
REST 请求破坏事务的原因
REST 请求通常是无状态的,每个请求独立处理。这种特性可能会破坏事务的连续性:
- 连接中断:每个 REST 请求通常打开一个新的数据库连接,无法保证事务的连续性。
- 状态丢失:事务状态无法在多个独立的 REST 请求间持久化。
- 隔离性问题:不同请求可能在不同的节点或服务中处理,无法保证事务的隔离性。
因此,事务需要在单个执行体中进行管理,而不是跨多个 REST 请求。
Rest 流程中的事务模式
将一个rest接口包装成一个事务,当流程节点出错或者主动将流程以失败结束时,回滚整个流程。

Form节点触发流程的事务模式
Form节点触发的事务模式有两个条件:
- 必须是Form节点触发且选择事务运行
- 第二个节点必须是表单节点

Form节点触发流程的事务模式的效果
以一个简单的审批流程为例

当配置了一个表单流程是事务流程后, 表单或者审批节点之间形成一个实物运行。
比如节点3 groovy节点出错,会将表单节点2和groovy节点中对数据库的操作一并回滚。
其中有一个优势就是对于审批节点,如果审批后续节点出错,可以自然的回退到审批节点等待修复流程或者数据后进行再次审批。