# demo06 **Repository Path**: Flowable_BPMN/demo06 ## Basic Information - **Project Name**: demo06 - **Description**: 补偿事件的执行顺序 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2019-01-27 - **Last Updated**: 2022-05-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ------ 环境: [jkd8+]() [mysql5.6+]() ## 一、原理 1、usertask1完成任务,触发边界补偿事件,并注册此事件,同时act_ru_event_subscr表新增一条注册记录。 2、usertask2完成任务,触发边界补偿事件,并注册此事件,同时act_ru_event_subscr表新增一条注册记录。 3、补偿中间事件执行完后,先补偿2,后补偿1。也就是先执行的任务后补偿。 *结论:* 1、一般流程,先完成的活动,补偿会最后执行。 2、对于一些并行的流程,并且在每一个流程分支中均有需要补偿的流程活动,那么相应的补偿处理者的执行顺序与正常流程一致,**先完成的活动,补偿会最后执行,即使这些并行的活动是异步的**。 ## 二、流程图 - flowable6.4.0需要手动修改补偿中间事件的xml配置,因为flowable6.4.0没有补偿中间事件的图标 - flowable6.4.0补偿器上也要修改xml配置,新增isForCompensation="true"属性,flowable6.4.0代码有bug,流程设计器上勾选了,但是导出xml时候,丢失了isForCompensation属性。后续有空修改此bug。 ![](./images/process.png) ## 三、配置 - 补偿器上分别在xml配置文件上,添加isForCompensation="true"属性 - 补偿中间事件配置 compensateEventDefinition必须带上,否则不能补偿。这是flowable6.4.0代码有bug。 ``` ``` ## 四、实践测试 - 部署流程 - 启动流程 - 分别完成usertask1,usertask2的任务,同时观察act_ru_event_subscr表 - 当usertask2的任务完成时候,查看日志,发现先补偿2,后补偿1