Activiti任务监听器(Task listener)

本文详细介绍了Activiti工作流引擎中的任务监听器概念及应用。任务监听器用于在任务的特定事件(如创建、分配、完成和删除)发生时执行自定义的Java逻辑。文章解释了如何使用XML配置文件来指定监听器,并提供了实现TaskListener接口的示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://www.cnblogs.com/jimboi/p/8477014.html

任务侦听器:用于在任务相关的事件发生时执行一段java逻辑或者是表达式

<userTask id="myTask" name="My Task" >
  <extensionElements>
    <activiti:taskListener event="create" class="org.activiti.MyTaskCreateListener" />
  </extensionElements>
</userTask>

activiti:taskListener 元素属性说明:

  • event (required): 事件类型.。支持的类型有:

    • create: 任务被创建,并且所有的属性都被设置好后。

    • assignment: 任务被委派给某人后.。注意: 当流程执行到达一个userTask时,会先触发一个assignment事件,再触发create事件。

    • complete:在任务完成后,且被从运行时数据(runtime data)中删除前触发。

    • delete: 在任务将要被删除之前发生。注意,当任务通过completeTask完成任务时,它也会被执行。

  • class: 必须调用的委托类。 一定要实现 org.activiti.engine.delegate.TaskListenerinterface接口。

public class MyTaskCreateListener implements TaskListener {

  public void notify(DelegateTask delegateTask) {
    // Custom logic goes here
  }
}

 

### ActivitiTaskListener 和 ActivityEventListener 的区别及使用场景 #### TaskListener `TaskListener` 是用于监听特定任务事件的接口。这些事件包括 `create`, `assignment`, `complete` 等。通过实现此接口并注册到流程定义中的某个任务节点上,可以在相应事件发生时执行自定义逻辑。 可以解析成实现 `TaskListener` 接口的对象的表达式 `<activiti:taskListener event="create" delegateExpression="${myTaskListenerBean}" />`[^1]。这意味着可以通过配置文件指定一个实现了 `TaskListener` 接口的 Bean 来处理创建任务时触发的动作。 ```xml <userTask id="usertask1" name="My User Task"> <extensionElements> <activiti:taskListener event="create" delegateExpression="${myTaskListenerBean}"/> </extensionElements> </userTask> ``` 对于 Java 类来说,则需确保该类实现了 `org.activiti.engine.delegate.TaskListener interface` 并重写了 `notify()` 方法来编写业务逻辑[^2]: ```java public class MyTaskCreateListener implements TaskListener { @Override public void notify(DelegateTask delegateTask) { // 自定义逻辑放在这里 } } ``` #### ActivityEventListener 另一方面, `ActivityEventListener` 则是用来捕获整个活动生命周期内的各种状态变化的通知机制。它不仅限于单个任务级别的操作,而是能够响应更广泛的范围,比如进入某一流程片段、离开当前环节等动作的发生。因此,在某些情况下可能更适合用来做全局性的监控或是日志记录等功能。 要使 Spring Boot 应用程序中的 `@Service` 或其他组件能被正确识别为 `ActivityEventListener` 实现者,通常需要额外配置以解决依赖注入问题[^3]。这涉及到如何让 Activiti 引擎知道哪些 bean 需要在适当时候作为监听器实例化和调用其方法。 ```java @Component public class MyCustomActivityListener implements ActivityBehavior { private final SomeService someService; @Autowired public MyCustomActivityListener(SomeService someService){ this.someService = someService; } @Override public void execute(ActivityExecution execution) throws Exception { // 执行一些基于活动的行为... } } ``` 需要注意的是上述例子实际上展示了 `ActivityBehavior` 而不是 `ActivityEventListener`;这是因为官方文档中并没有直接提供关于 `ActivityEventListener` 注册的例子,但在实际开发过程中确实存在这样的需求,并且一般会采用类似于上面的方式来进行集成。 总结而言: - **TaskListener**: 主要关注具体任务层面的操作,适用于当希望针对个别任务设置特殊行为的时候。 - **ActivityEventListener**: 更加通用,覆盖了更大范围的过程流转控制点,适合构建跨多个任务或子过程的应用级特性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值