flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案

简介: flowable 监听器无法获取spring bean ,自动注入bean为null,解决方案
package com.sinochem.it.bpm.flowable.handler;
import com.sinochem.it.bpm.flowable.config.TaskCallbackUrlConfig;
import com.sinochem.it.bpm.flowable.exception.FlowException;
import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
/**
 * 多实例任务监听器
 * @author : jiagang
 * @date : Created in 2021/9/14 9:06
 */
@Component
@Slf4j
public class MultiInstanceUserTaskListener implements TaskListener {
    @Autowired
    private TaskCallbackUrlConfig taskCallbackUrlConfig;
    @Autowired
    private RestTemplate restTemplate;
    private static MultiInstanceUserTaskListener myListener;
    /**
     * 监听器中无法获取spring bean配置
     */
    @PostConstruct
    public void init() {
        myListener = this;
        myListener.taskCallbackUrlConfig = this.taskCallbackUrlConfig;
        myListener.restTemplate = this.restTemplate;
    }
    @Override
    public void notify(DelegateTask delegateTask) {
        try {
            String[] strings = delegateTask.getAssignee().split("_");
            Map<String, Object> paramsMap = new HashMap<>();
            paramsMap.put("taskAssignee",delegateTask.getAssignee()); // 审批人code
            paramsMap.put("taskAssigneeName",delegateTask.getAssignee()); // 审批人name
            if (strings.length >= 2){
                paramsMap.put("taskAssignee",strings[0]); // 审批人code
                paramsMap.put("taskAssigneeName",strings[1]); // 审批人name
            }
            paramsMap.put("tenantId",delegateTask.getTenantId());
            paramsMap.put("businessInstanceId",delegateTask.getVariable("businessInstanceId"));
            paramsMap.put("initiatorUserCode", delegateTask.getVariable("userCode")); //发起人用户标识
            paramsMap.put("initiatorUserName", delegateTask.getVariable("userName")); //发起人用户名
            paramsMap.put("taskId", delegateTask.getId());
            paramsMap.put("taskName", delegateTask.getName());
            paramsMap.put("description", delegateTask.getDescription());
            paramsMap.put("wfName", delegateTask.getVariable("wfName"));
            paramsMap.put("billId", delegateTask.getVariable("billId")); //单据id
            paramsMap.put("approveTitle", delegateTask.getVariable("approveTitle")); //送审标题
            paramsMap.put("billType", delegateTask.getVariable("billType"));
            paramsMap.put("approveURL",delegateTask.getVariable("approveURL"));
            paramsMap.put("variables",delegateTask.getVariables());
            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Type","application/json");
            HttpEntity<Object> entity = new HttpEntity<Object>(paramsMap,headers);
            Map s = myListener.restTemplate.postForObject(myListener.taskCallbackUrlConfig.getAddMultiInstanceUserTaskCallbackUrl(), entity,Map.class);
            if (!s.get("code").equals(0)) {
                throw new FlowException("流程任务事件(多实例会签任务回调)回调API接口异常,异常信息:" + s.get("msg"));
            }
            log.info("流程实例id:" + delegateTask.getProcessInstanceId() + ",任务id:" + delegateTask.getId() + ",审批人:" + delegateTask.getAssignee());
        }catch (Exception e){
            String strMsg = "流程任务事件(多实例会签任务回调)回调API接口"
                    + ",流程实例ID=" + delegateTask.getProcessInstanceId()
                    + ",任务TaskID=" + delegateTask.getId()
                    + ",异常信息:" + e.getMessage();
            log.error(strMsg);
            throw new FlowException(strMsg);
        }
    }
}

注意调用时需要如下方式调用:

文章持续更新,可以关注下方公众号或者微信搜一搜「 最后一支迷迭香 」第一时间阅读,获取更完整的链路资料。

相关文章
|
XML Java 测试技术
Spring IOC—基于注解配置和管理Bean 万字详解(通俗易懂)
Spring 第三节 IOC——基于注解配置和管理Bean 万字详解!
957 26
|
人工智能 监控 安全
智慧工地解决方案,Spring Cloud智慧工地源代码
智慧工地平台针对建筑工地人员管理难、机械设备繁多、用电安全及施工环境复杂等问题,通过集成应用和硬件设备,实现数据互联互通与集中展示。基于微服务架构(Java+Spring Cloud+UniApp+MySql),平台支持PC端、手机端、平板端、大屏端管理,涵盖人员实名制、工资考勤、视频AI监控、绿色施工、危大工程监测、物料管理和安全质量管理等功能,助力施工现场的数字化、智能化综合管理,提升效率与安全性。
373 15
|
11月前
|
druid Java 关系型数据库
Spring Boot与Druid升级解决方案
好的,我需要帮助用户解决他们遇到的数据库连接问题,并升级项目的依赖。首先,用户提供的错误信息是关于Spring Boot应用在初始化数据源时抛出的异常,具体是Druid连接池验证连接失败。同时,用户希望升级项目的依赖版本。
1037 10
|
监控 Java 关系型数据库
Spring Boot整合MySQL主从集群同步延迟解决方案
本文针对电商系统在Spring Boot+MyBatis架构下的典型问题(如大促时订单状态延迟、库存超卖误判及用户信息更新延迟)提出解决方案。核心内容包括动态数据源路由(强制读主库)、大事务拆分优化以及延迟感知补偿机制,配合MySQL参数调优和监控集成,有效将主从延迟控制在1秒内。实际测试表明,在10万QPS场景下,订单查询延迟显著降低,超卖误判率下降98%。
511 5
|
SQL 前端开发 Java
深入分析 Spring Boot 项目开发中的常见问题与解决方案
本文深入分析了Spring Boot项目开发中的常见问题与解决方案,涵盖视图路径冲突(Circular View Path)、ECharts图表数据异常及SQL唯一约束冲突等典型场景。通过实际案例剖析问题成因,并提供具体解决方法,如优化视图解析器配置、改进数据查询逻辑以及合理使用外键约束。同时复习了Spring MVC视图解析原理与数据库完整性知识,强调细节处理和数据验证的重要性,为开发者提供实用参考。
484 0
|
安全 前端开发 Java
Spring Boot 项目中触发 Circular View Path 错误的原理与解决方案
在Spring Boot开发中,**Circular View Path**错误常因视图解析与Controller路径重名引发。当视图名称(如`login`)与请求路径相同,Spring MVC无法区分,导致无限循环调用。解决方法包括:1) 明确指定视图路径,避免重名;2) 将视图文件移至子目录;3) 确保Spring Security配置与Controller路径一致。通过合理设定视图和路径,可有效避免该问题,确保系统稳定运行。
751 0
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
982 7
|
存储 Java Spring
【Spring】获取Bean对象需要哪些注解
@Conntroller,@Service,@Repository,@Component,@Configuration,关于Bean对象的五个常用注解
429 12
|
存储 Java 应用服务中间件
【Spring】IoC和DI,控制反转,Bean对象的获取方式
IoC,DI,控制反转容器,Bean的基本常识,类注解@Controller,获取Bean对象的常用三种方式
565 12
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
506 6
下一篇
开通oss服务