记录最近使用flowable任务监听器和java服务任务相关的一个问题
TaskListener 主要是监听usertask的情况,监听事件event有4种:
create 创建
assignment 分配人
complete 完成
delete 删除
xml:
<userTask id="USERTASK" name="USERTASK" >
<extensionElements>
<activiti:taskListener event="complete" class="com.github.flowable.delegate.MyListener"/>
</extensionElements>
</userTask>
代码:
public class MyListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
System.out.println("===========执行监听器============");
}
}
这里会有一个问题,当有spring依赖注入时,会获取不到,看了一下应该是,流程引擎启动时,依赖注入还未初始化完成,因为是groovy和java是在工程中混着用的,可能会存在这个问题
这里通过另外一种方式解决,通过ApplicationContextAware接口的方式获取ApplicationContext对象实例
@Component
public class MyListener implements TaskListener, ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
applicationContext = arg0;
}
@Override
public void notify(DelegateTask delegateTask) {
String processInsId = delegateTask.getProcessInstanceId();
MyService myService = (MyService) applicationContext.getBean("myService");
// TODO 执行service方法
System.out.println("==========执行监听器======");
}
}
同样java服务任务也存在这个问题
xml:
<serviceTask id="classservicetask" name="class方式" flowable:class="com.github.flowable.delegate.ClassImplementsJavaDelegate">
</serviceTask>
代码:
@Component
public class ClassImplementsJavaDelegate implements JavaDelegate, ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
applicationContext = arg0;
}
public void execute(DelegateExecution execution) {
String processInsId = execution.getProcessInstanceId();
MyService myService = (MyService) applicationContext.getBean("myService");
System.out.println("=====================指定实现了JavaDelegate的类=====================");
}
}
原文:https://www.cnblogs.com/DF-Kyun/p/12669095.html