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