Listener 引入SpringBean
import com.project.common.handler.BaseHolder;
import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.ExecutionListener;
import org.activiti.engine.delegate.event.ActivitiEvent;
import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* 正常结束事件监听器
*/
@Service("activitiListenser")
public class ActivitiListenser implements ActivitiEventListener, ExecutionListener {
@Autowired
private ActivitiService activitiService;
public ActivitiListenser(){
if(activitiService == null){
activitiService = BaseHolder.getBean(ActivitiService.class);
}
}
/**
* 流程事件监听
*/
@Override
public void onEvent(ActivitiEvent activitiEvent) {
// 流程结束事件
if(ActivitiEventType.PROCESS_COMPLETED.equals(activitiEvent.getType())){
eventProcessComplete(activitiEvent.getProcessInstanceId());
}
}
/**
* 任务事件监听
*/
@Override
public void notify(DelegateExecution delegateExecution) throws Exception {
// 任务结束事件
if(EVENTNAME_END.equalsIgnoreCase(delegateExecution.getEventName())){
eventProcessComplete(delegateExecution.getProcessInstanceId());
}
}
/**
* 异常时失败
*/
@Override
public boolean isFailOnException() {
System.out.println("走这里肯定是流程出错了");
return false;
}
/**
* 流程结束事件
*/
private void eventProcessComplete(String procInstId){
String businessKey = activitiService.getBusinessKeyByProcInstId(procInstId);
if(StringUtils.isNotBlank(businessKey)){
System.out.println(businessKey);
}
}
}
下面是BaseHolder
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class BaseHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 服务器启动,Spring容器初始化时,当加载了当前类为bean组件后,
* 将会调用下面方法注入ApplicationContext实例
*/
@Override
public void setApplicationContext(ApplicationContext arg0) throws BeansException {
System.out.println("初始化了");
BaseHolder.applicationContext = arg0;
}
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
/**
* 用bean组件的name来获取bean
*/
@SuppressWarnings("unchecked")
public static <T>T getBean(String beanName){
return (T) applicationContext.getBean(beanName);
}
/**
* 用类来获取bean
*/
public static <T> T getBean(Class<T> c){
return applicationContext.getBean(c);
}
}