1. Flowable中的数据表有哪些?
主要分为Repository Tables(RE)、Runtime Tables(RU)、History Tables(HI)、Generic Tables(GE)。
-
Repository Tables(RE)
- ACT_RE_PROCDEF: 存储流程定义信息,包括流程BPMN 2.0 XML定义和其他元数据,如流程定义的版本号、资源Blob(如有流程图图像等)。
-
Runtime Tables(RU)
- ACT_RU_EXECUTION: 存储流程实例的运行时数据,如当前活动节点(activity)、流程变量等。
- ACT_RU_TASK: 存储待办任务列表(Task)信息。
- ACT_RU_VARIABLE: 存储流程实例运行时的变量值。
- ACT_RU_EVENT_SUBSCR: 存储事件订阅信息,用于监听流程事件。
- ACT_RU_JOB: 存储定时任务和异步任务等作业信息。
- ACT_RU_IDENTITYLINK: 存储流程实例参与者的身份链接信息,如候选人、办理人等角色。
-
History Tables(HI)
- ACT_HI_PROCINST: 存储已完成或已结束的流程实例历史数据。
- ACT_HI_ACTINST: 存储历史活动实例数据。
- ACT_HI_VARINST: 存储历史变量实例数据。
- ACT_HI_TASKINST: 存储历史任务实例数据。
- ACT_HI_DETAIL: 存储流程执行的详细历史数据。
- ACT_HI_COMMENT: 存储流程实例相关的评论历史记录。
- ACT_HI_ATTACHMENT: 存储流程历史附件信息。
-
Generic Tables(GE)
- ACT_GE_BYTEARRAY: 存储二进制大型对象(BLOB),通常用于存储流程定义XML、流程图和其他资源文件。
2. 任务流程中的任务流转时,都会涉及到哪些表?
- 更新
ACT_RU_EXECUTION表中的当前活动节点ID(processDefinitionActivityId)。 - 根据流程定义和流转逻辑,可能创建新的任务记录到
ACT_RU_TASK表中。 - 如果流转过程中涉及变量的变更,
ACT_RU_VARIABLE表中的数据会随之更新。 - 如果触发了异步操作或定时任务,还会涉及到
ACT_RU_JOB表。 - 流转的历史信息会被记录在历史表中,如
ACT_HI_TASKINST和ACT_HI_ACTINST等。
3. Flowable任务流转的并发问题怎么解决?
Flowable提供了多种并发控制机制来确保数据的一致性和正确性:
- 数据库事务管理: Flowable通过数据库事务来保证数据的原子性和一致性。所有的数据库操作都被封装在事务内,当流程执行过程中发生流转时,相关的数据库更新操作(如更新执行实例状态、插入任务、更新变量等)都在一个事务内完成,确保要么全部成功要么全部回滚。
- 乐观锁机制: Flowable在某些情况下使用乐观锁机制来处理并发问题。例如,在读取和更新流程实例或任务时,它可能会检查版本号(revision)以确保在读取和更新之间没有其他线程对数据进行修改。
- 并发令牌(Token) : 在流程执行过程中,Flowable使用令牌(token)来表示流程实例在流程图中的当前位置。令牌的流转受到控制,防止多个令牌同时处于同一个节点导致的并发问题。
- 任务抢占(Task Claiming) : Flowable支持任务抢占机制,即当多个用户同时尝试领取一个任务时,只允许一个用户成功领取。这通过数据库事务和相应的并发控制机制实现,确保在高并发环境下任务只能被一个执行者领取。
- 多实例并发执行(Parallel Multi-Instance Tasks) : 对于多实例并行任务,Flowable提供了不同的并发策略,如并行(Parallel)、序列(Sequential)和无序(No Ordering),确保并发执行的任务实例之间不会互相干扰。
- 异步处理和消息队列: 对于耗时较长的操作,Flowable支持异步执行并通过消息队列来解耦任务的处理,从而避免了主线程阻塞和并发问题。异步任务的调度和执行同样遵循严格的并发控制策略。