Flowable动态任务处理人+springboot bean注入为null

文章讲述了在实现Flowable动态任务处理人时遇到SpringBootBean注入为null的问题。作者通过监听器设置动态候选人,但发现数据库存储的审核人在Mapper中无法自动注入。经过排查,确认配置类已在Spring容器中,问题仅限于特定监听器。最终,通过实现ApplicationContextAware接口并静态化ApplicationContext来手动获取Bean,解决了注入问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flowable动态任务处理人+springboot bean注入为null

    最近有个需求,需要动态设定流程引擎的候选人,这种需求比较简单,网上资料也很多,我选择了 通过监听器设置,但是有个问题,审核人需要配合前端页面更改任务处理人.所以选择了审核人存储在数据库

1.flowable动态任务处理人

public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
  String userId =userWorkflowMapper.getWorkFlow(processKey, jobName);
    // 因为需要多人审批,所以统一选择了候选人
delegateTask.addCandidateUser(userId);
}
}

  但是在使用过程中,userWorkflowMapper自动注入失败,需要解决该问题

2.解决spring boot bean注入为null问题

spring bean是什么?

  spring bean就是一个配置类,在使用过程中我们就是把配置类交给spring容器管理(也就是我们常说的ioc),这样就可以让我们的配置类在其他spring管理的类中通过注入的方式来进行使用。但是在注入的过程中也会遇到注入为null的现象

排查思路

  1.先要明确配置类是否被加载到spring容器中,比如是否加@Component注解

  2.因为我是Mapper自动导入不了,但是我在Service层测试调用是成功了,

  3.只是在MyTaskListener自动导入不了spring bean

解决办法

  使用手动加载bean的方式解决了问题

@Configuration
public class FlowableServiceConfig implements ApplicationContextAware {
    static ApplicationContext applicationContext;

    public static <T> T getBean(Class<T> clazz) {
        return applicationContext.getBean(clazz);
    }

    @Override
    public void setApplicationContext(ApplicationContext arg0) throws BeansException {
        if (applicationContext == null) {
            applicationContext = arg0;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值