以挂起状态启动camunda进程
Start camunda process in the suspended state
在数据导入任务中,我需要以某种"paused"或挂起状态启动多个camunda进程实例。该进程有一些计时器,这些计时器的值可以是过去的。所以如果我正常启动这样一个进程,它会立即开始执行一些任务,但我想以某种方式推迟执行(因为任务正在使用一些尚未导入的数据)。
所以,我想要这样的行为:
1) 以某种方式暂停 camunda 引擎、作业执行器或流程定义。
2) 导入所有需要的数据,同时启动所有需要的进程
3) 取消暂停 camunda,让它 运行 并执行之前启动的进程。
我尝试了以下解决方案:
1) 从 Cockpit 全局暂停流程定义。但是当我启动流程时,它会抛出关于暂停流程定义的异常。
我使用以下代码开始处理:
runtimeService.createProcessInstanceByKey("process-key")
.businessKey("some-business-key")
.setVariables(vars)
.startBeforeActivity("xxx")
.execute();
2)用相同的代码启动进程,并在同一个tx中挂起进程实例
runtimeService.suspendProcessInstanceById(processInstance.getProcessInstanceId());
但是我遇到了一些例外和事件。
3) 在配置文件中全局禁用 camunda 作业执行器。工作正常,但每次修改配置和重启服务器不是很方便。
有没有更好的解决方案?
找到了一种在运行时控制作业执行器的方法。
JobExecutor jobExecutor = ((ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration()).getJobExecutor();
if (jobExecutor.isActive()) {
jobExecutor.shutdown();
} else {
jobExecutor.start();
}
在数据导入任务中,我需要以某种"paused"或挂起状态启动多个camunda进程实例。该进程有一些计时器,这些计时器的值可以是过去的。所以如果我正常启动这样一个进程,它会立即开始执行一些任务,但我想以某种方式推迟执行(因为任务正在使用一些尚未导入的数据)。 所以,我想要这样的行为:
1) 以某种方式暂停 camunda 引擎、作业执行器或流程定义。
2) 导入所有需要的数据,同时启动所有需要的进程
3) 取消暂停 camunda,让它 运行 并执行之前启动的进程。
我尝试了以下解决方案:
1) 从 Cockpit 全局暂停流程定义。但是当我启动流程时,它会抛出关于暂停流程定义的异常。 我使用以下代码开始处理:
runtimeService.createProcessInstanceByKey("process-key")
.businessKey("some-business-key")
.setVariables(vars)
.startBeforeActivity("xxx")
.execute();
2)用相同的代码启动进程,并在同一个tx中挂起进程实例 runtimeService.suspendProcessInstanceById(processInstance.getProcessInstanceId()); 但是我遇到了一些例外和事件。
3) 在配置文件中全局禁用 camunda 作业执行器。工作正常,但每次修改配置和重启服务器不是很方便。
有没有更好的解决方案?
找到了一种在运行时控制作业执行器的方法。
JobExecutor jobExecutor = ((ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration()).getJobExecutor();
if (jobExecutor.isActive()) {
jobExecutor.shutdown();
} else {
jobExecutor.start();
}