异步启动进程
Starting process asynchronously
我想确保每个 Camunda 流程实例都异步启动,而不管流程定义如何。 Configure Asynchronous Continuations 文档建议此行为需要使用 "Asynchronous Before" 属性标记每个开始事件:
Asynchronous instantiation of a process instance is enabled using the camunda:asyncBefore extension attribute on a process-level start event. On instantiation, the process instance will be created and persisted in the database, but execution will be deferred.
有没有一种方法可以使用 org.camunda.bpm.engine.RuntimeService
或其他 Java 代码实现相同的效果,而无需将 "Asynchronous Before" 属性应用于每个流程定义中的每个启动事件?
RuntimeService
公开了异步方法,但仅用于删除操作,例如有 deleteProcessInstancesAsync()
但没有 startProcessInstanceById**Async**()
方法。
根据 thorben's 评论,可以使用 parseStartEvent()
方法实现自定义 BpmnParseListener
。
public class AsyncBeforeStartListener extends AbstractBpmnParseListener {
@Override
public void parseStartEvent(Element startEventElement, ScopeImpl scope,
ActivityImpl startEventActivity) {
startEventActivity.setAsyncBefore(true);
}
}
我想确保每个 Camunda 流程实例都异步启动,而不管流程定义如何。 Configure Asynchronous Continuations 文档建议此行为需要使用 "Asynchronous Before" 属性标记每个开始事件:
Asynchronous instantiation of a process instance is enabled using the camunda:asyncBefore extension attribute on a process-level start event. On instantiation, the process instance will be created and persisted in the database, but execution will be deferred.
有没有一种方法可以使用 org.camunda.bpm.engine.RuntimeService
或其他 Java 代码实现相同的效果,而无需将 "Asynchronous Before" 属性应用于每个流程定义中的每个启动事件?
RuntimeService
公开了异步方法,但仅用于删除操作,例如有 deleteProcessInstancesAsync()
但没有 startProcessInstanceById**Async**()
方法。
根据 thorben's 评论,可以使用 parseStartEvent()
方法实现自定义 BpmnParseListener
。
public class AsyncBeforeStartListener extends AbstractBpmnParseListener {
@Override
public void parseStartEvent(Element startEventElement, ScopeImpl scope,
ActivityImpl startEventActivity) {
startEventActivity.setAsyncBefore(true);
}
}