在JavaDelegate中使用runtimeService服务

背景

在工作流服务任务中,常需要使用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服务,与前面代码功能相同。

相关推荐
Mark_ZP4 天前
Camunda修改列表
camunda
RuoyiOffice13 天前
SpringBoot3+Vue3 低代码业务表单:从拖拽设计、独立建表到审批与数据查询
spring boot·vue3·数据建模·flowable·版本管理·低代码表单·ruoyi office
大龄码农有梦想20 天前
企业工作流系统如何设计用户、部门、角色、岗位、动态关系五类流程办理人?
工作流引擎·flowable·流程引擎·oa·工作流系统·选人规则·bpm平台
李少兄21 天前
解决Activiti排他网关(ExclusiveGateway)陷入无限死循环问题
activiti
RuoyiOffice22 天前
SpringBoot3+Vue3 流程抄送已读:打开详情消红点,待办与知会怎么分开
spring boot·vue3·flowable·spring boot 3·ruoyi office·流程抄送·已读回执
大龄码农有梦想24 天前
开源流程引擎 Camunda 如何实现任意节点跳转?
工作流引擎·流程引擎·camunda·oa·bpn·流程跳转·会签
RuoyiOffice24 天前
SpringBoot3+Vue3+Flowable 企业审批平台全链路:从表单设计、节点权限到移动审批怎么落地
spring boot·vue3·uniapp·springboot3·flowable·审批系统·ruoyi office
李少兄25 天前
解决 Activiti UEL 表达式解析异常 TreeBuilderException
activiti
凤山老林1 个月前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
RuoyiOffice1 个月前
SpringBoot3+Vue3 最推荐的开源 OA 系统 2026:流程驱动、资源闭环、多端互通
spring boot·vue3·flowable·oa·协同办公·spring boot 3·开源oa