JBPM通过CorrelationKey查询流程实例失效问题求助
jBPM历史流程实例查询与CorrelationKey问题解决
我正在优化一个jBPM示例项目,需求是获取历史已完成流程实例的deployment id和process id,用于通过历史部署ID和流程ID重跑工作流。启动流程时传入了自定义CorrelationKey作为标识,但后续用相同CorrelationKey查询流程实例无结果,仅通过流程实例ID查询能正常返回数据。
启动流程代码
@Bean public CorrelationKeyFactory correlationKeyFactory(){ return new JPACorrelationKeyFactory(); } private CorrelationKey generateCorrelationKey(String key) { return factory.newCorrelationKey(key); } CorrelationKey correlationKey = generateCorrelationKey("1234"); Long processInstanceId = processService.startProcess("business-application-kjar-1_0-SNAPSHOT", "com.mastertheboss.LicenseDemo", correlationKey, vars);
CorrelationKey查询代码
CorrelationKey correlationKey = generateCorrelationKey("1234"); ProcessInstanceDesc processInstanceById = runtimeDataService.getProcessInstanceByCorrelationKey(correlationKey);
实例ID查询代码
runtimeDataService.getProcessInstanceById(processId)
问题原因
runtimeDataService.getProcessInstanceByCorrelationKey()默认仅查询运行中的流程实例,已完成的历史流程实例不会被该方法返回,这是用CorrelationKey查不到结果的核心原因。
解决方案
- 查询历史流程实例
要获取已完成流程的deployment id和process id,需使用HistoryService查询历史数据,示例代码:
// 通过CorrelationKey筛选已完成的历史流程实例 List<ProcessInstanceLog> historyInstances = historyService.createProcessInstanceLogQuery() .correlationKey("1234") .finished() .list(); // 提取目标信息 for (ProcessInstanceLog log : historyInstances) { String deploymentId = log.getDeploymentId(); String processId = log.getProcessId(); // 执行重跑工作流逻辑 }
校验CorrelationKey关联有效性
确认启动流程时CorrelationKey被正确绑定到实例:检查JPACorrelationKeyFactory配置是否生效,确保查询时的CorrelationKey值与启动时完全一致(注意大小写、特殊字符等细节)。重跑工作流的关键注意点
重跑时必须使用历史deploymentId(对应原流程定义版本)和processId启动新实例,保证流程逻辑与原实例完全匹配。
内容的提问来源于stack exchange,提问作者Udara S.S Liyanage
相关产品推荐
相关产品推荐

