当前位置: 首页 > 科技观察

Activiti工作流分析

时间:2023-03-14 18:58:06 科技观察

一、工作流1.工作流概述在公司业务中,每个业务的开始和结束都可以理解为一个工作流。比如在公司请假的基本流程。如图所示,某员工先提交请假申请,提交给直属领导审批,再提交给人事部审批。审批完成后,通知提交申请的员工,请假流程结束。整个步骤按照正常的工作方式一步步完成,是一个简单而完整的工作流程;工作流可以理解为从起始节点开始流程,然后经过多个节点,完成动作,最后在结束节点结束的整个过程。在没有工作流引擎之前,为了实现上述流程控制,开发者最常见的做法是使用状态值来跟踪流程的状态变化。假设初始值为0,每一个流程流程,状态值+1,然后给出相应的处理逻辑。可见工作流程和业务是高度耦合的。当流程发生变化时,我们的业务代码也必须进行相应的调整。如果有一个工具可以帮助我们管理工作流,当业务流程发生变化时,程序不需要改变,最终会大大提高我们的开发能力和业务能力。于是乎,工作流引擎应运而生!二、Activiti简介1.简介Activiti是一个开源的工作流引擎,实现了BPMN2.0规范,可以发布设计好的流程定义,并通过api进行流程调度Activiti是一个轻量级、可嵌入的BPM引擎,可以提取复杂的业务流程,然后使用特殊的建模语言BPMN2.0来定义执行过程。最后,业务系统通过访问Activiti的接口来驱动预定义的流程执行。Activiti流程引擎专注于系统开发的易用性。在性能和轻便方面。Activiti流程引擎的每一个BPM业务功能都以服务的形式提供给开发者。通过使用这些服务,开发者可以构建功能丰富、轻量级、高效的BPM应用2.Activiti服务架构activiti.cfg.xml:Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接的参数pool核心类:ProcessEngine:流程引擎的抽象,你可以通过这个服务类获取你需要的所有服务:手术。相关生命周期内的服务信息可以通过服务类RepositoryService获取,Repository服务为Activiti中的每个服务提供了对存储库服务的访问权限,定义不同版本的业务流程需要使用一些定义文件、部署文件和支持数据(如BPMN2.0XML文件、表单定义文件、流程定义图像文件等),存储在Activiti内置的Repository中RuntimeServiceRuntimeService提供启动流程、查询流程实例、设置和获取流程实例变量等功能.此外,还提供流程部署、流程定义、流程实例的接入服务。TaskServiceTask服务提供与用户Task和Form相关的操作。提供运行时任务查询、收集、补全、删除、变量设置等功能。HistoryServiceHistory服务用于获取有关正在运行或已完成的流程实例的信息。与RuntimeService中获取的流程信息不同,历史信息包括持久化存储的Permanent信息,并针对查询FormService进行了优化,可以使用FormService访问启动和完成任务所需的表单数据,根据需要渲染表单Activiti中的流程和状态Task可以关联业务相关的数据IdentityServiceIdentityService提供了Activiti系统中用户和组的管理功能。Activiti内置了用户和组管理功能,必须利用这些用户和组的信息获取相应的TaskManagementServiceManagementService,为Activiti流程引擎提供管理和维护功能。这些函数在工作流驱动的应用程序中没有用到,主要用于Activiti系统的日常使用。Maintenancecomponent持久化组件:Activiti使用mybatis做OR映射,并在此基础上,添加设计自己的持久化框架,在流程引擎创建时进行初始化。顶层接口Session和SessionFactorySession有两个实现类:DbSqlSession:负责sql表达式AbstractManager:负责对象持久化操作SessionFactory有两个实现类:DbSqlSessionFactory:负责DbSqlSession相关操作GenericManagerFactory:负责AbstractManager相关操作Event-Listener组件:Activiti允许客户代码干预流程执行,提供事件监听组件监听事件类型:TaskListener、JavaDelegate、Expression、ExecutionListener,ProcessEngineConfigurationImpl持有DelegateInterceptor实例,方便调用handleInvocationCache组件:DbSqlSession有一个缓存实现Activiti是基于List和Map做缓存的:如果先查询缓存,没有则直接查询放入缓存异步执行组件:Activiti可以执行任务,JobExecutor是它的核心类,JobExecutor包含三个主要属性:JobAcquisitionThread、BlockingQueue、ThreadPoolExecutor,引擎启动时ProcessEngines调用JobExecutor.start的方法,JobAcquisitionThread这一行程序开始运行,其run方法不断循环执行AcquiredJobs中的作业。线程执行后等待一定时间,直到超时或者因为有新任务调用了JobExecutor.jobWasAdded方法Context组件Context:用来保存长生命周期,全局信息,类似于Application。主要包括以下三类:CommandContext:命令上下文——保存每条命令必要的资源,如sessionProcessEngineConfigurationImpl:流程引擎相关配置Information——整个引擎的全局配置信息,如数据源DataSource等。这object是单例,创建流程引擎时初始化ExecutionContext:持有ExecutionEntity对象3.Activiti数据库支持所有以ACT_开头的表第二部分是一个双字母标识符,表示表的用途,对应于服务ACT_RE_*的API:'RE'表示存储库。这个前缀的表包含流程定义和流程静态资源(图片,规则...)ACT_RU_*:'RU'代表运行时。这些运行时表包含流程实例、任务、变量、异步任务和其他运行数据。Activiti只在流程实例执行期间保存这些数据,流程结束时删除这些记录。这样运行时表就可以一直小而快ACT_ID_*:'ID'表示身份。这些表包含身份信息,例如用户、组...ACT_HI_*:'HI'表示历史。这些表包含历史数据,例如历史流程实例、变量、任务...ACT_GE_*:一般数据。用于不同场景,如存储资源文件、资源库、流程规则表说明:act_re_deployment部署信息表act_re_model流程设计模型部署表act_re_procdef流程定义数据表运行时数据库表说明:act_ru_execution运行时流程执行实例表act_ru_identitylink运行时流程personnel表,主要存储任务节点和参与者信息act_ru_task运行时任务节点表act_ru_variable运行时过程变量数据表组织结构表4、BPM/BPMN引入了BPM(BusinessProcessManagement),即业务流程管理,是端到端业务流程的标准化构建,以持续提高组织业务效率。常见的工商管理教育如EMBA、MBA等,里面都有BPM。BPMN(BusinessProcessModelAndNotation)是一种业务流程模型和符号。它是一组标准的业务流程建模符号。可以使用BPMN提供的符号来创建业务流程。Activiti使用BPMN进行流程建模和流程执行管理。BPMN2.0是BusinessProcessModelingNotation2.0的首字母缩写,由非营利性协会BusinessProcessManagementInitiative创建并持续开发。BPMN2.0是一套符号规范,使用一些符号来明确业务流程设计的流程图,可以提高业务建模中的沟通效率。目前BPMN2.0为最新版本,用于BPM上下文中的布局和可视化传达。BPMN2.0基本符号简介如下:3.springboot集成Activiti新建springboot项目pom.xml在资源目录导入相关依赖新建进程目录作为*.bmnpapplication.yml的存放路径,配置idea安装插件ActivitiBPMNvisualizer,创建流程图打开文件,右键选择如图:最终会生成一个xml文件:通过读取png和获取请假流程bmnp:4、考虑使用Activiti场景1.关键业务流程:订单、报价处理、合同审核、客户来电处理、供应链管理等2.行政管理:出差申请、加班申请、请假申请、用车申请、各类办公用品申请、采购申请、日报、周报等。3.人事管理:员工培训安排、绩效考核、工作变动处理、员工档案le信息管理等4.财务相关类:付款请求、应收账款处理、日常报销处理、出差报销、预算及计划申请等5.客户服务类:客户信息管理、客户投诉、请求处理、事后处理-销售服务管理等五、总结从公司的角度来看,工作流系统规范了公司的业务流程,优化了公司的内部管理,提高了团队之间的协作效率,可以帮助公司转型为以知识为基础的公司。Activiti作为技术开发人员,在基于串并行传输的小项目中,基本可以满足业务和开发的需求;但是Activiti对技术要求比较高,二次开发难度大,需要技术人员不断完善和学习。在实战中,开发出了价值极高的工作流系统。