上篇文章介绍了网关的相关内容,本篇文章我们来讲讲Activiti的监听。
大家也都知道,实际业务中工作流一般不会单独使用,一般都会跟随一些我们自己的业务场景,比如学生请假,当学生发起一个请假的时候,我们需要通知班主任有学生发起请假了,当老师审批结束后,我们又要告诉学生,老师审批完成。这样的操作该怎么去实现呢,用监听就可以简单的做到。
先讲一下Activiti的监听种类吧,监听有二种:
1、全局监听:监听整个流程的开始和结束
全局监听需要实现ExecutionListener接口并重写notify方法,我们点开接口会发现接口中定义了三个监听种类
public class ActivitiExecutionListener implements ExecutionListener{
private static final long serialVersionUID = 1L;
@Override
public void notify(DelegateExecution execution) throws Exception {
String eventName = execution.getEventName();
if("start".endsWith(eventName)){
System.out.println("流程 start===");
}else if("end".endsWith(eventName)){
System.out.println("流程 end===");
}else if("take".endsWith(eventName)){
System.out.println("流程 take===");
}
}
}
2、任务监听(点监听):监听单个任务节点的流程运作(创建、提交、删除、分派)
任务监听实现TaskListener接口并重写notify方法,同样我们点开TaskListener接口会发现里面有这么几个监听种类
public class ActivitiTaskListener implements TaskListener {
private static final long serialVersionUID = 1L;
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("===========进来了==============");
String eventName = delegateTask.getEventName();
if("create".endsWith(eventName)){
System.out.println("任务create==="+delegateTask.getName());
}else if("complete".endsWith(eventName)){
System.out.println("任务task complete==="+delegateTask.getName());
}else if("delete".endsWith(eventName)){
System.out.println("任务task delete==="+delegateTask.getName());
}else if("assignment".endsWith(eventName)){
System.out.println("任务task assignment==="+delegateTask.getName());
}
}
}
以上是简单的监听类,接下来我们画一个简单的流程图,还是以学生请假为例子:
现在给他添加监听事件,我们需要在学生发起结束的时候告诉班主任有学生发起了,所以在学生请假的节点上设置一个节点提交的监听。
选择监听类型和我们之前写好的监听类,点OK
同样我们再班主任节点提交上也做一个监听。
同时还在全局上做了流程开始和结束的监听,方便查看效果。操作方式一样
接下来启动流程查看结果如图
如图显示代表我们所有的监听都执行了
总结
本文只是简单的介绍监听事件的做法,事件业务中可以根据自己传入的参数做一些自己的业务操作。