如何在BPMN XML的边界定时器触发的服务任务中调用自定义Java Bean?
Flowable边界定时器触发服务任务无法调用Spring Bean问题
问题场景与代码实现
我在BPMN XML中配置了边界定时器事件,期望30秒后触发服务任务,调用Spring Boot项目中自定义的JavaDelegate实现类SampleTask,但定时器触发后服务任务未执行Bean逻辑,且抛出异常。
初始BPMN配置代码
<serviceTask id="servicetask1" name="Task2" flowable:async="true" flowable:class="com.leave.request.handler.SampleTask"></serviceTask> <boundaryEvent id="boundarytimer1" name="Timer" attachedToRef="tlReviewTask" cancelActivity="true"> <timerEventDefinition> <timeDuration>PT30S</timeDuration> </timerEventDefinition> </boundaryEvent> <sequenceFlow id="flow16" sourceRef="boundarytimer1" targetRef="servicetask1"></sequenceFlow>
问题要点
- 边界定时器设置为30秒后触发,已确认定时器能正常触发
- 定时器触发后通过序列流指向服务任务,但服务任务未调用
SampleTaskBean - 先后尝试了
flowable:class和flowable:delegateExpression两种配置,问题均未解决
尝试过的委托表达式配置
<serviceTask id="servicetask1" name="Task2" flowable:async="true" flowable:delegateExpression="${sampleTask}"></serviceTask>
排查与解决方案建议
- 检查Bean注册状态:确认
SampleTask类添加了@Component/@Service注解,确保Spring容器已扫描并实例化该Bean;若用delegateExpression,需保证表达式中的Bean名称与容器内的Bean名称匹配(默认类名首字母小写,自定义名称需对应)。 - 异步任务配置检查:服务任务开启了
flowable:async="true",需确认Flowable异步执行器已正确配置并启动;检查ACT_RU_JOB表是否存在该异步任务记录,排查任务是否未被调度。 - 异常日志分析:提取完整异常堆栈,重点排查是否出现
NoSuchBeanDefinitionException(Bean找不到)、InstantiationException(类实例化失败)或依赖/权限相关异常。 - Flowable与Spring集成验证:确认项目已引入兼容版本的Flowable Spring Starter依赖;检查Flowable配置类,确保启用了Spring上下文支持,让Flowable能从Spring容器获取Bean。
内容的提问来源于stack exchange,提问作者BHARAT RATHOD
相关产品推荐
相关产品推荐

