Flowable 有3種監聽器,相關內容在開發文檔中有詳細的說明:
- 事件監聽器(Flowable 開發文檔 3.18)
- 執行監聽器(Flowable 開發文檔 8.5.13)
- 任務監聽器(Flowable 開發文檔 8.5.14)
分別實現下面的接口,重寫相應的方法可以實現監聽。
// 事件監聽器接口,可全局監聽整個流程
org.flowable.common.engine.api.delegate.event.FlowableEventListener;
// 執行監聽器,可監聽每一個組件,整個流程也可以配置
org.flowable.engine.delegate.ExecutionListener;
// 任務監聽器,主要用來監聽節點
org.flowable.engine.delegate.TaskListener;
實現了相應的監聽器後,還要在流程設計器中與流程配置綁定才能生效。
事件監聽器
可實現流程的全局監聽,監聽的粒度比較細。支持的監聽事件列表可參考開發文檔3.18.6。
找到資料24. flowable 全局監聽,繼承下面的接口,再重寫與事件對應的方法。感覺這種方式要好用一些。
org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
另外,開發文檔 3.18.3 裏面有說明,利用 RuntimeService
就可以在運行時添加監聽器。
接口實現
實現FlowableEventListener
@Component
public class WorkFlowListener implements FlowableEventListener {
@Override
public void onEvent(FlowableEvent event) {
System.out.println("全局監聽:WorkFlowListener");
}
@Override
public boolean isFailOnException() {
return false;
}
@Override
public boolean isFireOnTransactionLifecycleEvent() {
return false;
}
@Override
public String getOnTransaction() {
return null;
}
}
實現 AbstractFlowableEngineEventListener
@Component
public class WorkFlowListener1 extends AbstractFlowableEngineEventListener {
@Override
protected void taskCreated(FlowableEngineEntityEvent event) {
System.out.println("全局監聽:WorkFlowListener1-任務創建");
}
@Override
protected void variableCreated(FlowableVariableEvent event) {
System.out.println("全局監聽:WorkFlowListener1-創建變量");
}
@Override
protected void processCreated(FlowableEngineEntityEvent event) {
System.out.println("全局監聽:WorkFlowListener1-創建流程");
}
@Override
protected void processStarted(FlowableProcessStartedEvent event) {
System.out.println("全局監聽:WorkFlowListener1-開始流程");
}
@Override
protected void taskAssigned(FlowableEngineEntityEvent event) {
System.out.println("全局監聽:任務分配");
}
}
執行監聽器
支持流程級別監聽。
可監聽的事件
- 流程實例的啓動和結束。
- 流程執行轉移。
- 活動的啓動和結束。
- 網關的啓動和結束。
- 中間事件的啓動和結束。
- 啓動事件的結束,和結束事件的啓動。
具體選項
start 開始
take 啓用
end 結束
在轉移上只會觸發take
事件。當監聽器定義在轉移上時,event
屬性的值將被忽略。
接口實現
@Component
public class TestExecutionListener implements ExecutionListener {
@Override
public void notify(DelegateExecution execution) {
System.out.println("執行監聽器:" + execution.getEventName());
}
}
任務監聽器
只能監聽用戶任務;如果監聽器不存在是會報錯的。
可監聽的事件
create 任務已經創建
assignment 已經分配辦理人
complete 任務已經完成
delete 任務即將被刪除
執行的順序 :
assignment 分配辦理人 → create 創建 → complete 完成 → delete 刪除
文檔中相關解釋
請注意:當流程執行到達用戶任務時,在觸發create事件之前,會首先觸發assignment事件。這順序看起來不太自然,但是有實際原因的:當收到create事件時,我們通常希望能看到任務的所有參數,包括辦理人。
接口實現
@Component
public class UserTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("節點監聽:" + delegateTask.getEventName());
}
}