Skip to content

执行监听器、任务监听器

Flowable 提供了执行监听器(Execution Listener)和任务监听器(Task Listener)两种扩展机制,用于在流程/任务的特定事件点执行自定义逻辑。

1. 执行监听器

执行监听器在流程节点执行时触发,支持 start(开始)和 end(结束)两个事件。

1.1 Java 类方式

实现 org.flowable.engine.delegate.JavaDelegate 接口:

java
@Slf4j
@Component
public class MyExecutionListener implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        log.info("节点 {} 执行", execution.getCurrentActivityId());
        // 自定义逻辑
    }
}

1.2 委托表达式

使用 ${bean.method(execution)} 格式,调用 Spring Bean 的方法。

1.3 Spring 表达式

直接使用 SpEL 表达式,如 ${myService.doSomething()}

2. 任务监听器

任务监听器在用户任务的特定事件点触发,支持更多事件类型:

事件触发时机
create任务创建时
assignment任务分配审批人时
complete任务完成时
delete任务删除时
update任务更新时
timeout任务超时时

2.1 Java 类方式

实现 org.flowable.task.service.delegate.TaskListener 接口:

java
@Slf4j
@Component
public class MyTaskListener implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        log.info("任务 {} 事件: {}", 
            delegateTask.getName(), delegateTask.getEventName());
    }
}

2.2 委托表达式

同执行监听器,使用 ${bean.method(task)} 格式。

2.3 Spring 表达式

直接使用 SpEL 表达式。

3. 流程监听器模板

RuoYi Office 提供了流程监听器模板管理功能,便于复用监听器配置。

3.1 使用场景

当多个流程需要使用相同的监听器时,可以创建模板,在流程设计时直接选择。

3.2 表结构

监听器模板存储在 bpm_process_listener 表:

字段类型说明
idbigint编号
namevarchar(100)名称
typevarchar(50)类型(executionListener/taskListener)
statustinyint状态
eventvarchar(50)监听事件
value_typevarchar(50)值类型(class/delegateExpression/expression)
valuevarchar(500)监听器值

3.3 管理界面

在「流程中心 → 流程监听器」页面管理监听器模板。