Flowable 全局监听 监听流程的启动和流程的结束

一、版本

<flowable.version>7.0.0.M1</flowable.version>
 
<dependency>
	<groupId>org.flowable</groupId>
	<artifactId>flowable-spring-boot-starter-process</artifactId>
	<version>${flowable.version}</version>
</dependency>

二、Flowable全局监听配置

 
import lombok.AllArgsConstructor;
import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;
import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;
import org.flowable.spring.SpringProcessEngineConfiguration;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
 
/**
 * @ClassName FlowableGlobListenerConfig
 * @Description TODO
 * @Author zhua
 * @Date 2023/12/26 9:35
 * @Version 1.0
 */
@AllArgsConstructor
@Configuration
public class FlowableGlobListenerConfig implements ApplicationListener<ContextRefreshedEvent> {
 
    private final SpringProcessEngineConfiguration configuration;
	private final GlobalProcessStartedListener globalProcessStartedListener;
    private final GlobalProcistEndListener globalProcistEndListener;
 
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        FlowableEventDispatcher dispatcher = configuration.getEventDispatcher();
		//流程开始全局监听
        dispatcher.addEventListener(globalProcessStartedListener, FlowableEngineEventType.PROCESS_STARTED);
        //流程结束全局监听
        dispatcher.addEventListener(globalProcistEndListener, FlowableEngineEventType.PROCESS_COMPLETED);
    }
}

三、流程启动的监听器

 
import org.flowable.engine.delegate.event.impl.FlowableEntityEventImpl;
import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
import org.flowable.engine.delegate.event.FlowableProcessStartedEvent;
import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
 
import java.util.Date;
 
/**
 * @ClassName GlobalProcistEndListener
 * @Description TODO
 * @Author zhua
 * @Date 2023/12/26 9:42
 * @Version 1.0
 */
@Component
public class GlobalProcessStartedListener extends AbstractFlowableEngineEventListener {
    protected Logger logger = LoggerFactory.getLogger(this.getClass());
 
    @Override
    protected void processStarted(FlowableProcessStartedEvent event) {
        logger.info("进入流程开始监听器------------------------Start---------------------->");
 
        String eventName = event.getType().name();
 
        FlowableEntityEventImpl flowableEntityEvent = (FlowableEntityEventImpl) event;
        ExecutionEntityImpl processInstance = (ExecutionEntityImpl) flowableEntityEvent.getEntity();
 
        Date startTime = processInstance.getStartTime();
        String processDefinitionKey = processInstance.getProcessDefinitionKey();
        String processInstanceId = processInstance.getProcessInstanceId();
        String processInstanceBusinessKey = processInstance.getProcessInstanceBusinessKey();
        int suspensionState = processInstance.getSuspensionState();
 
        logger.info("流程事件类型->{}", eventName);
        logger.info("流程开始时间->{}", startTime);
        logger.info("流程定义Key->{}", processDefinitionKey);
        logger.info("流程实例ID->{}", processInstanceId);
        logger.info("流程业务key->{}", processInstanceBusinessKey);
        logger.info("流程是否挂起标志->{}", suspensionState);
 
        logger.info("流程开始监听器------------------------End---------------------->");
 
    }
}

四、流程结束的监听器

 
import org.flowable.common.engine.api.delegate.event.FlowableEngineEntityEvent;
import org.flowable.engine.delegate.event.AbstractFlowableEngineEventListener;
import org.flowable.engine.delegate.event.impl.FlowableEntityEventImpl;
import org.flowable.engine.impl.persistence.entity.ExecutionEntityImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
 
import java.util.Date;
 
/**
 * @ClassName GlobalProcistEndListener
 * @Description TODO
 * @Author zhua
 * @Date 2023/12/26 9:42
 * @Version 1.0
 */
@Component
public class GlobalProcistEndListener extends AbstractFlowableEngineEventListener {
    protected Logger logger = LoggerFactory.getLogger(this.getClass());
 
    @Override
    protected void processCompleted(FlowableEngineEntityEvent event) {
        logger.info("进入流程完成监听器------------------------Start---------------------->");
        String eventName = event.getType().name();
 
        FlowableEntityEventImpl flowableEntityEvent = (FlowableEntityEventImpl) event;
        ExecutionEntityImpl processInstance = (ExecutionEntityImpl) flowableEntityEvent.getEntity();
 
        Date startTime = processInstance.getStartTime();
        String processDefinitionKey = processInstance.getProcessDefinitionKey();
        String processInstanceId = processInstance.getProcessInstanceId();
        String processInstanceBusinessKey = processInstance.getProcessInstanceBusinessKey();
        int suspensionState = processInstance.getSuspensionState();
 
 
        logger.info("流程事件类型->{}", eventName);
        logger.info("流程开始时间->{}", startTime);
        logger.info("流程定义Key->{}", processDefinitionKey);
        logger.info("流程实例ID->{}", processInstanceId);
        logger.info("流程业务key->{}", processInstanceBusinessKey);
        logger.info("流程是否挂起标志->{}", suspensionState);
 
        logger.info("流程完成监听器------------------------End---------------------->");
    }
 
}

五、支持的事件类型

下表列出引擎中的所有事件类型。每种类型对应org.flowable.engine.common.api.delegate.event.FlowableEventType中的一个枚举值。

事件名称说明事件类
ENGINE_CREATED本监听器所属的流程引擎已经创建,并可以响应API调用。org.flowable…​FlowableEvent
ENGINE_CLOSED本监听器所属的流程引擎已经关闭,不能再对该引擎进行API调用。org.flowable…​FlowableEvent
ENTITY_CREATED新的实体已经创建。该实体包含在本事件里。org.flowable…​FlowableEntityEvent
ENTITY_INITIALIZED新的实体已经创建并完全初始化。如果任何子实体作为该实体的一部分被创建,本事件会在子实体创建/初始化后触发,与 ENTITY_CREATE 事件相反。org.flowable…​FlowableEntityEvent
ENTITY_UPDATED实体已经更新。该实体包含在本事件里。org.flowable…​FlowableEntityEvent
ENTITY_DELETED实体已经删除。该实体包含在本事件里。org.flowable…​FlowableEntityEvent
ENTITY_SUSPENDED实体已经暂停。该实体包含在本事件里。ProcessDefinitions(流程定义), ProcessInstances(流程实例)与Tasks(任务)会分发本事件。org.flowable…​FlowableEntityEvent
ENTITY_ACTIVATED实体已经激活。该实体包含在本事件里。ProcessDefinitions, ProcessInstances与Tasks会分发本事件。org.flowable…​FlowableEntityEvent
JOB_EXECUTION_SUCCESS作业已经成功执行。该作业包含在本事件里。org.flowable…​FlowableEntityEvent
JOB_EXECUTION_FAILURE作业执行失败。该作业与异常包含在本事件里。org.flowable…​FlowableEntityEvent 及 org.flowable…​FlowableExceptionEvent
JOB_RETRIES_DECREMENTED作业重试次数已经由于执行失败而减少。该作业包含在本事件里。org.flowable…​FlowableEntityEvent
TIMER_SCHEDULED已创建一个定时作业,并预计在未来时间点执行。org.flowable…​FlowableEntityEvent
TIMER_FIRED定时器已经触发。org.flowable…​FlowableEntityEvent
JOB_CANCELED作业已经取消。该作业包含在本事件里。作业会由于API调用取消,任务完成导致关联的边界定时器取消,也会由于新流程定义的部署而取消。org.flowable…​FlowableEntityEvent
ACTIVITY_STARTED节点开始执行org.flowable…​FlowableActivityEvent
ACTIVITY_COMPLETED节点成功完成org.flowable…​FlowableActivityEvent
ACTIVITY_CANCELLED节点将要取消。节点的取消有三个原因(MessageEventSubscriptionEntity, SignalEventSubscriptionEntity, TimerEntity)。org.flowable…​FlowableActivityCancelledEvent
ACTIVITY_SIGNALED节点收到了一个信号org.flowable…​FlowableSignalEvent
ACTIVITY_MESSAGE_RECEIVED节点收到了一个消息。事件在节点接收消息前分发。节点接收消息后,会为该节点分发 ACTIVITY_SIGNAL 或 ACTIVITY_STARTED 事件,取决于其类型(边界事件,或子流程启动事件)。org.flowable…​FlowableMessageEvent
ACTIVITY_MESSAGE_WAITING一个节点已经创建了一个消息事件订阅,并正在等待接收消息。org.flowable…​FlowableMessageEvent
ACTIVITY_MESSAGE_CANCELLED一个节点已经取消了一个消息事件订阅,因此接收这个消息不会再触发该节点。org.flowable…​FlowableMessageEvent
ACTIVITY_ERROR_RECEIVED节点收到了错误事件。在节点实际处理错误前分发。该事件的activityId为处理错误的节点。如果错误成功传递,后续会为节点发送 ACTIVITY_SIGNALLED 或 ACTIVITY_COMPLETE 消息。org.flowable…​FlowableErrorEvent
UNCAUGHT_BPMN_ERROR抛出了未捕获的BPMN错误。流程没有该错误的处理器。该事件的activityId为空。org.flowable…​FlowableErrorEvent
ACTIVITY_COMPENSATE节点将要被补偿(compensate)。该事件包含将要执行补偿的节点id。org.flowable…​FlowableActivityEvent
MULTI_INSTANCE_ACTIVITY_STARTED多实例节点开始执行org.flowable…​FlowableMultiInstanceActivityEvent
MULTI_INSTANCE_ACTIVITY_COMPLETED多实例节点成功完成org.flowable…​FlowableMultiInstanceActivityEvent
MULTI_INSTANCE_ACTIVITY_CANCELLED多实例节点将要取消。多实例节点的取消有三个原因(MessageEventSubscriptionEntity, SignalEventSubscriptionEntity, TimerEntity)。org.flowable…​FlowableMultiInstanceActivityCancelledEvent
VARIABLE_CREATED流程变量已经创建。本事件包含变量名、取值,及关联的执行和任务(若有)。org.flowable…​FlowableVariableEvent
VARIABLE_UPDATED变量已经更新。本事件包含变量名、取值,及关联的执行和任务(若有)。org.flowable…​FlowableVariableEvent
VARIABLE_DELETED变量已经删除。本事件包含变量名、最后取值,及关联的执行和任务(若有)。org.flowable…​FlowableVariableEvent
TASK_ASSIGNED任务已经分派给了用户。该任务包含在本事件里。org.flowable…​FlowableEntityEvent
TASK_CREATED任务已经创建。本事件在 ENTITY_CREATE 事件之后分发。若该任务是流程的一部分,本事件会在任务监听器执行前触发。org.flowable…​FlowableEntityEvent
TASK_COMPLETED任务已经完成。本事件在 ENTITY_DELETE 事件前分发。若该任务是流程的一部分,本事件会在流程前进之前触发,并且会跟随一个 ACTIVITY_COMPLETE 事件,指向代表该任务的节点。org.flowable…​FlowableEntityEvent
PROCESS_CREATED流程实例已经创建。已经设置所有的基础参数,但还未设置变量。org.flowable…​FlowableEntityEvent
PROCESS_STARTED流程实例已经启动。在启动之前创建的流程时分发。PROCESS_STARTED事件在相关的ENTITY_INITIALIZED事件,以及设置变量之后分发。org.flowable…​FlowableEntityEvent
PROCESS_COMPLETED流程实例已经完成。在最后一个节点的 ACTIVITY_COMPLETED 事件后分发。当流程实例没有任何路径可以继续时,流程结束。org.flowable…​FlowableEntityEvent
PROCESS_COMPLETED_ WITH_TERMINATE_END_EVENT流程已经到达终止结束事件(terminate end event)并结束。org.flowable…​FlowableProcessTerminatedEvent
PROCESS_CANCELLED流程已经被取消。在流程实例从运行时中删除前分发。流程实例由API调用RuntimeService.deleteProcessInstance取消。org.flowable…​FlowableCancelledEvent
MEMBERSHIP_CREATED用户已经加入组。本事件包含了相关的用户和组的id。org.flowable…​FlowableMembershipEvent
MEMBERSHIP_DELETED用户已经从组中移出。本事件包含了相关的用户和组的id。org.flowable…​FlowableMembershipEvent
MEMBERSHIPS_DELETED组的所有用户将被移出。本事件在用户移出前抛出,因此关联关系仍然可以访问。因为性能原因,不会再为每个被移出的用户抛出 MEMBERSHIP_DELETED 事件。org.flowable…​FlowableMembershipEvent
  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flowable 全局监听器可以用于监听所有流程引擎实例中的事件。全局监听器必须实现 org.flowable.common.engine.api.delegate.event.FlowableEventListener 接口,并且注册到流程引擎配置中。当事件发生时,监听器将被触发并执行特定的业务逻辑。 以下是一个简单的 Flowable 全局监听器示例: ```java public class MyGlobalEventListener implements FlowableEventListener { @Override public void onEvent(FlowableEvent event) { // 处理事件 System.out.println("Event received: " + event.getType()); } @Override public boolean isFailOnException() { return false; } @Override public boolean isFireOnTransactionLifecycleEvent() { return false; } } ``` 在上面的示例中,onEvent() 方法处理监听到的事件。isFailOnException() 方法返回 false,表示如果监听器出现异常,流程引擎仍将继续执行。isFireOnTransactionLifecycleEvent() 方法也返回 false,表示不监听事务生命周期事件。 要将全局监听器注册到流程引擎配置中,可以使用以下代码: ```java ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault(); config.setAsyncExecutorActivate(false); List<FlowableEventListener> eventListeners = new ArrayList<>(); eventListeners.add(new MyGlobalEventListener()); config.setEventListeners(eventListeners); ``` 在上面的示例中,将 MyGlobalEventListener 添加到 eventListeners 列表中,并将列表设置为流程引擎配置的事件监听器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值