我想确保每个Camunda流程实例都以异步方式启动,而不管流程定义如何。 Configure Asynchronous Continuations文档建议此行为要求将每个开始事件标记为“异步之前”属性:
使用camunda:asyncBefore扩展属性在流程级启动事件上启用流程实例的异步实例化。实例化后,将创建流程实例并将其保留在数据库中,但是将推迟执行。
是否有一种方法可以使用org.camunda.bpm.engine.RuntimeService
或其他Java代码在每个流程定义中的每个启动事件上不应用“异步之前”属性,而无需使用“异步之前”属性?
RuntimeService
公开了异步方法,但仅用于删除操作,例如有deleteProcessInstancesAsync()
,但没有startProcessInstanceById**Async**()
方法。
答案 0 :(得分:1)
根据thorben's注释,可以使用BpmnParseListener
方法实现自定义parseStartEvent()
。
public class AsyncBeforeStartListener extends AbstractBpmnParseListener {
@Override
public void parseStartEvent(Element startEventElement, ScopeImpl scope,
ActivityImpl startEventActivity) {
startEventActivity.setAsyncBefore(true);
}
}