activiti&flowable获取下一个节点信息

博客涉及Flowable、Activity和BPMN相关内容,虽未给出具体内容,但这些均为信息技术领域中工作流管理相关概念。Flowable是开源工作流引擎,Activity是流程中的活动,BPMN是业务流程建模符号,用于业务流程可视化。
直接贴代码,不懂可说明:

/**
 * 获取下一个节点的信息测试
 */
@Test
public void testNextTasks() {

    //流程实例id
    String processInstanceId = "5b945750-81db-11e9-a576-1a73f8e23adc";

    //当前任务信息
    Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).singleResult();

    //获取流程发布Id信息
    String definitionId = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult().getProcessDefinitionId();

    //获取bpm对象
    BpmnModel bpmnModel = repositoryService.getBpmnModel(definitionId);

    //传节点定义key 获取当前节点
    FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());

    //输出连线
    List<SequenceFlow> outgoingFlows = flowNode.getOutgoingFlows();

    //遍历返回下一个节点信息
    for (SequenceFlow outgoingFlow : outgoingFlows) {
        //类型自己判断
        FlowElement targetFlowElement = outgoingFlow.getTargetFlowElement();
        //用户任务
        if (targetFlowElement instanceof UserTask) {
            //。。。
        }
        else if (targetFlowElement instanceof ExclusiveGateway) {
            setExclusiveGateway(targetFlowElement);
        }
    }
}


private void setExclusiveGateway(FlowElement targetFlow) {
        //排他网关,获取连线信息
        List<SequenceFlow> targetFlows = ((ExclusiveGateway) targetFlow).getOutgoingFlows();
        for (SequenceFlow sequenceFlow : targetFlows) {
            //目标节点信息
            FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement();
            if (targetFlowElement instanceof UserTask) {
                // do something
            } else if (targetFlowElement instanceof EndEvent) {
                // do something
            } else if (targetFlowElement instanceof ServiceTask) {
               // do something
            } else if (targetFlowElement instanceof ExclusiveGateway) {
                //递归寻找
                setExclusiveGateway(targetFlowElement);
            } else if (targetFlowElement instanceof SubProcess) {
               // do something
            }     
        }
    }
//获取所有节点信息:
https://blog.youkuaiyun.com/double_hll123/article/details/97111583
### 功能对比 - **企业级能力**:Camunda 提供 Camunda Cockpit(全链路监控)、批处理 API、流程实例迁移、分布式定时器;Flowable 支持历史数据分片(如 MongoDB)、动态加签/减签、HTTP 任务节点;Activiti 缺乏高级企业特性,监控工具薄弱[^2]。 - **性能与稳定性**:高并发场景下,Camunda 在压力测试中表现最佳,1000 并发下响应时间比 Flowable 快 20%,Flowable 在 200 + 并发时可能出现稳定性问题。事务管理方面,Camunda 支持 SAGA 模式补偿事务,适合分布式系统,Flowable 依赖 Spring 事务控制,无原生分布式事务方案[^2]。 - **技术特性**:从商业化来看,Activiti 5.x 未商业化,Activiti - 7.x、Flowable - 6.x、Camunda 均已商业化;在引擎类型上,Activiti 5.x 有 PVM 引擎,Activiti - 7.x、Flowable - 6.x、Camunda 有 BPMN2 引擎和 CMMN 引擎,Flowable - 6.x 开源版 DMN 引擎支持不太好;流程设计器方面,Activiti 和 Flowable 有 Eclipse/IDEA 插件,Camunda 有 Camunda Modeler;此外,在 Spring Boot、Spring Cloud、Web 控制台、Rest 接口等支持情况以及异步归档、异步任务全局锁等特性上也存在差异[^4]。 ### 使用指南 关于具体使用指南,文档和社区往往是重要的资源。通常可以从官方网站获取详细的文档,了解如何进行引擎的安装、配置、流程设计、部署和执行等操作。例如,对于流程设计,Activiti 和 Flowable 可以使用 Eclipse/IDEA 插件进行设计,Camunda 可以使用 Camunda Modeler 进行设计。在开发过程中,根据不同引擎对 Spring Boot、Spring Cloud 等框架的支持情况,结合自身项目的技术栈进行开发。 ### 应用场景 - **Flowable**:适用于需动态流程调整(如加签)、多模型混合编排、中大型复杂业务,典型用例有金融风控、保险理赔[^2]。 - **Camunda**:适用于高并发、分布式架构、强监控需求(如实时运维看板)、云原生部署,典型用例有电商订单流水线、物流调度[^2]。 - **Activiti**:适用于中小项目快速验证、历史系统兼容(Activiti 5 遗留项目),典型用例有简单审批流、OA 表单[^2]。 ### 代码示例(以 Java 和 Spring Boot 集成 Flowable 简单审批流为例) ```java import org.flowable.engine.ProcessEngine; import org.flowable.engine.ProcessEngineConfiguration; import org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration; import org.flowable.engine.runtime.ProcessInstance; public class FlowableExample { public static void main(String[] args) { // 配置流程引擎 ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration() .setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1") .setJdbcUsername("sa") .setJdbcPassword("") .setJdbcDriver("org.h2.Driver") .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); // 创建流程引擎 ProcessEngine processEngine = cfg.buildProcessEngine(); // 部署流程定义 processEngine.getRepositoryService() .createDeployment() .addClasspathResource("simpleApprovalProcess.bpmn20.xml") .deploy(); // 启动流程实例 ProcessInstance processInstance = processEngine.getRuntimeService() .startProcessInstanceByKey("simpleApprovalProcess"); System.out.println("流程实例启动,ID: " + processInstance.getId()); } } ```
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值