SpringBoot項目中,activiti某個流程節點配置了任務監聽器,代碼如下
public class ApplyListener implements TaskListener, ExecutionListener {
private static final long serialVersionUID = -6000293034409953144L;
@Autowired
private TaskService taskService;
@Override
public void notify(DelegateTask delegateTask) {
taskService.setAssignee(delegateTask.getId(),"zhangsan");
}
@Override
public void notify(DelegateExecution delegateExecution) {
}
}
執行任務提交報錯:Exception while invoking TaskListener: null
個人理解,上述過程中MyTaskListenre雖然存在於Spring容器中,但未被Spring容器所管理,所以@Autowired失效
解決方案:
寫一個工具類,手動獲取Bean
@Component
public class SpringUtil implements ApplicationContextAware {
/**
* 當前IOC
*
*/
private static ApplicationContext applicationContext;
/**
* 設置applicationContext
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public static <T> T getObject(Class<T> clazz){
return applicationContext.getBean(clazz);
}
}
修改 監聽器類代碼
@Component
@Slf4j
public class ApplyListener implements TaskListener, ExecutionListener {
private static final long serialVersionUID = -6000293034409953144L;
@Override
public void notify(DelegateTask delegateTask) {
TaskService taskService = SpringUtil.getObject(TaskService.class);
taskService.setAssignee(delegateTask.getId(),"zhangsan");
}
@Override
public void notify(DelegateExecution delegateExecution) {
}
}