【Activiti】原理

一、核心类

  • RepositoryService:部署管理流程资源,如bpmn文件、附件等等;
  • RuntimeService:操作运行时的流程;
  • TaskService:流程中任务的信息;
  • HistoryService:流程的历史信息;
  • ManagerService:管理流程引擎的信息。

二、核心表

  • ACT_GE_*:General,表示通用表。
  • ACT_HI_*:History,保存历史数据,比如执行过的流程实例、变量、任务等等。Activiti默认提供四种历史级别:none(不保存任何历史记录)、activity(保存所有的流程实例、任务、活动信息)、audit(默认级别,保存所有的流程实例、任务、活动、表单属性)、full(最完整的历史记录,详细到日志跟踪)。
  • ACT_ID_*:Identity,保存身份信息,比如用户和组之间的关系。Activiti被集成到某一系统时,这些表可以不用,而直接使用现有系统中的用户或组信息。
  • ACT_RE_*:Repository,保存一些仓库信息,比如流程定义流程资源(图片或规则等)。
  • ACT_RU_*:Runtime,保存一些流程实例用户任务变量等的运行时数据。当流程结束后会立即移除这些数据。

三、使用步骤

(1)编写bpmn文件,画流程图,在application.yml配置文件中【process-definition-location-prefix】标明需要扫描的流程图路径;

(2)创建流程引擎;

(3)获取RepositoryService实例:相当于拿到数据库连接;

(4)使用RepositoryService部署流程:相当于使用RepositoryService操作数据库。此处可设置流程名字、addClassPathResource()绑定流程图、部署流程。

(5)启动流程【RuntimeService】;

(6)创建任务【TaskService】;

(7)根据流程定义处理人等查询,并根据任务ID完成任务:taskService.complete()。

// 1.创建流程引擎
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

// 2.获取RepositoryService实例:相当于拿到数据库连接
RepositoryService repositoryService = processEngine.getRepositoryService();

// 3.使用RepositoryService部署流程:相当于使用RepositoryService操作数据库
Deployment deployment = repositoryService.createDeployment()
        .name("请假申请流程")                        // 设置流程的名称
        .addClasspathResource("processes/Leave.bpmn")    // 设置流程所用到的资源
        .addClasspathResource("processes/Leave.png")     // 设置流程所用到的图片
        .deploy();    // 部署流程,相当于插入操作

// 4.获取RuntimeService,根据流程定义ID启动流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myLeave");

// 5.创建TaskService,根据流程key和任务负责人查询此流程(myLeave)下的该负责人(zhangsan)所拥有的任务信息。
TaskService taskService = processEngine.getTaskService();

// 6.获取TaskService,完成任务
TaskService taskService = processEngine.getTaskService();
Task task = taskService.createTaskQuery()
        .processDefinitionKey("myLeave")
        .taskAssignee("zhangsan")
        .singleResult();
if (task != null) {
    taskService.complete(task.getId());
}

四、 Activiti和Flowable对比

(一)Flowable的优点:

  • 架构灵活:Flowable的架构非常灵活,可以轻松地嵌入到Spring或者其他Java应用中,也可以作为独立的服务运行。
  • 扩展性强:Flowable提供了插件机制,可以方便地扩展和定制工作流引擎的功能。
  • 高可用性:Flowable支持分布式部署,可以实现高可用性的工作流引擎。
  • 维护活跃:Flowable项目有一个活跃的社区,提供了及时的技术支持和更新。

(二)Flowable的缺点:

  • 文档相对较少:Flowable相对于Activiti,文档相对较少。
  • 社区相对较小:Flowable的社区相对于Activiti,规模较小。

(三)Activiti的优点:

  • 文档详细:Activiti的官方文档非常详细,易于新手学习和使用。
  • 社区活跃:Activiti的社区规模较大,提供了广泛的技术支持和资源。
  • 易于集成:Activiti可以轻松地与Spring集成,也可以作为独立的服务运行。
  • 贡献者较多:Activiti是一个比较成熟的工作流引擎,有大量的贡献者和用户,可以提供成熟的解决方案。

(四)Activiti的缺点:

  • 扩展性较弱:Activiti的插件机制较为有限,扩展和定制功能不如Flowable方便。
  • 可靠性较低:Activiti在一些用户反馈的场景下,存在一些稳定性问题,需要注意。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti是一个开源的轻量级工作流引擎,它提供了完整的BPMN2.0规范支持,并且易于使用和集成到Java应用程序中。它的工作原理如下: 1. 流程定义 首先,在Activiti中定义一个工作流程需要使用BPMN 2.0规范,也就是业务流程建模标准。在BPMN中,可以使用各种符号和连接线来描述工作流程中的各个步骤和分支条件。这些步骤和条件都被称为“流程节点”。 2. 流程部署 一旦定义了工作流程,它就需要被部署到Activiti引擎中。这个过程通常涉及到将BPMN文件上传到Activiti的流程存储库中,然后Activiti会自动解析BPMN文件并生成相应的流程定义数据结构。 3. 流程实例化 接下来,当需要执行一个流程时,就需要创建一个流程实例。流程实例是工作流程的一次执行,它包含了工作流程中的所有节点和连接线,并且记录了当前工作流程的执行状态。 4. 任务分配 当一个流程实例被创建时,Activiti会根据流程定义中的节点信息自动创建相应的任务。任务是工作流程中的一个步骤,通常需要由特定的用户或组来执行。任务分配可以手动或自动完成,根据业务需求来进行灵活配置。 5. 任务执行 一旦任务被分配给一个用户或组,就可以执行这个任务了。当任务执行完成后,它会产生一个结果,并且将流程实例的执行状态更新为下一个节点。 6. 流程结束 当所有的任务都被执行完成后,流程实例就可以结束了。在结束时,Activiti会将流程实例的执行结果保存到数据库中,以备将来查询和统计。 以上就是Activiti工作流引擎的基本工作原理,它提供了一个强大的工具来自动化业务流程,提高工作效率,并且可以与其他Java应用程序无缝集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值