# 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。

## 三、配置
- 补偿器上分别在xml配置文件上,添加isForCompensation="true"属性
- 补偿中间事件配置
compensateEventDefinition必须带上,否则不能补偿。这是flowable6.4.0代码有bug。
```
```
## 四、实践测试
- 部署流程
- 启动流程
- 分别完成usertask1,usertask2的任务,同时观察act_ru_event_subscr表
- 当usertask2的任务完成时候,查看日志,发现先补偿2,后补偿1