背景
在工作流服务任务中,常需要使用RuntimeService接口用于发起流程等业务。Camunda,Activit,Flowable三款产品在这个场景上操作有所不同, 现总结如下。
JeecgFlow 在线体验
camunda
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {@Overridepublic void execute(DelegateExecution delegateExecution) throws Exception {RuntimeService runtimeService = delegateExecution.getProcessEngine().getRuntimeService();runtimeService.startProcessInstanceByMessage("Message_war");}
}
可以通过这种方式访问所有camunda服务的API。
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {@Autowiredprivate RuntimeService runtimeService;@Overridepublic void execute(DelegateExecution delegateExecution) throws Exception {runtimeService.startProcessInstanceByMessage("Message_war");}
}
这是通过注入获取RuntimeService服务,与前面代码功能相同。
::: warning
需要注意,由于服务调用时当前事务中完成的, 所以在执行服务任务之前产生或修改的数据尚未存入数据库。
这是因为所有API调用都基于数据库数据处理,这些未提交的更改在服务任务API中调用不可见。
:::
Activiti
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {@Overridepublic void execute(DelegateExecution delegateExecution) throws Exception {RuntimeService runtimeService = Context.getProcessEngineConfiguration().getRuntimeService();\runtimeService.startProcessInstanceByMessage("myKey");}
}
可以通过这种方式访问所有Activiti服务的API。
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {@Autowiredprivate RuntimeService runtimeService;@Overridepublic void execute(DelegateExecution delegateExecution) throws Exception {runtimeService.startProcessInstanceByMessage("myKey");}
}
这是通过注入获取RuntimeService服务,与前面代码功能相同。
::: warning
需要注意,由于服务调用时当前事务中完成的, 所以在执行服务任务之前产生或修改的数据尚未存入数据库。
这是因为所有API调用都基于数据库数据处理,这些未提交的更改在服务任务API中调用不可见。
:::
Flowable
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {@Overridepublic void execute(DelegateExecution delegateExecution) throws Exception {RuntimeService runtimeService = Context.getProcessEngineConfiguration().getRuntimeService();\runtimeService.startProcessInstanceByMessage("myKey");}
}
可以通过这种方式访问所有Activiti服务的API。
@Component("handleWarMessage")
@Slf4j
public class HandleWarMessageTask implements JavaDelegate {@Autowiredprivate RuntimeService runtimeService;@Overridepublic void execute(DelegateExecution delegateExecution) throws Exception {runtimeService.startProcessInstanceByMessage("myKey");}
}
这是通过注入获取RuntimeService服务,与前面代码功能相同。
