如何通过Activiti表达式调用Spring Bean?多实例部署调用对象问询
Activiti多实例部署下的Bean调用疑问
背景信息
- BPMN文件已部署至共享数据库
hello.bpmn20.xml示例中,通过UEL方法表达式实现Spring Bean的调用- 部署架构:
Printer对应的服务以多实例方式部署,所有实例均连接同一数据库 - 流程图示:

核心疑问
当触发流程中调用Printer Bean的节点时,会调用多实例部署中的哪一个Printer实例?
解答
当满足上述部署条件时,BPMN流程会调用当前拾取并执行该流程任务的Activiti实例所对应的本地Printer Bean。
具体逻辑如下:
- 所有Activiti实例共享同一流程数据库,流程任务的状态、待执行任务队列都统一存储在数据库中。
- 每个Activiti实例都自带任务执行器(JobExecutor),会定期从数据库的待执行任务列表中拾取任务(多实例间为竞争式拾取)。
- 当某个Activiti实例成功拾取到需要调用
Printer的任务后,会直接调用自身Spring上下文内的PrinterBean实例,不会跨实例调用其他节点的Bean。
内容的提问来源于stack exchange,提问作者munan
相关产品推荐
相关产品推荐

