前段时间公司说要分享技术,所以每周安排同事分享技术。虽然有时候大部分人都在玩手机,但也有同事在专心学习。毕竟程序员总是在学习写代码的路上,JDK已经16了。虽然你现在可能还在用JDK8,但是你要继续学习。于是A粉准备研究一些公司目前没有用到的关系,于是他学习了一些关于Activiti工作流的知识,A粉在这里分享给大家。
什么是Activiti工作流引擎?什么是工作流?比如我们在公司请假,可能要走审批流程,从你自己到领导,再从领导到部门经理,再从部门经理到人事部。这一系列过程实际上相当于一个工作流,这是一个工作流最容易理解的模型。
官方的这种解读肯定不是这样,不然就太接地气了,那么Activiti workflow是什么?
工作流是指“计算机应用环境中部分或全部业务过程的自动化”。它是对工作流及其操作步骤之间的业务规则的抽象和概括描述。在计算机中,工作流是CSCW的一部分。后者一般研究一个群体如何在计算机的帮助下一起工作。
工作流要解决的主要问题是:为了实现某个业务目标,使用计算机按照一定的预定规则在多个参与者之间自动传递文档、信息或任务。
其实看到百度百科给出的提示就知道,其实工作流程就是让多个业务目标按照一定的规则传递信息。
上图是请假流程图,网上图,不是手绘动画,但是意思还是很清楚的。
接下来,我们做一个关于Activiti的整体项目。
准备工作我们先在 IDEA 中装个插件 actiBPM ,直接装就好。要准备,我们先在IDEA里安装一个插件actiBPM,直接安装就好了。
从GitHub下载源代码获得下载连接,
在数据库文件中,要注意文件中有对应的数据库,比如mysql和oracle。这些都不一样,不要直接打开导入。结果导入很久之后报了很多错误,至今不知道是什么原因。
使用这些SQL脚本构建数据库后,就是上图中的这些。让我们来看看表格。
ACT_HI_*:这些表包含历史数据,比如历史流程实例、变量、任务等。ACT_ID_*:这些表包含身份信息,比如用户、组织等。ACT_RE_*:包含流程定义和流程静态资源(图片、规则等。).ACT_RU_*:包含流程实例、任务、变量、异步任务等运行数据。以下表示是通过下载的源包导入的。下面我们用Activiti的时候,会直接用Activiti设计流程图,然后直接让它帮我们生成表格。
解释表act_ge_bytearray的一般数据
Act_ge_property流程引擎数据
Act_hi_actinst历史节点表
Act_hi_attachment历史附件表
Act_hi_comment历史意见表
Act_hi_detail历史明细
Act_hi_identitylink历史流程人员
act_hi_procinst历史进程示例
Act_hi_taskinst历史任务
Act_hi_varinst历史变量
Act_id_group用户信息组
Act_id_info用户信息详细信息
Act_id_membership group和相应的信息关联表
Act_id_user用户信息表
Act_procdef_info过程定义信息
行动_重新部署部署信息
Act_re_model流程设计模型
Act_re_procdef过程定义数据
Act _ ru _ event _ subscr信息监控
Act_ru_execution运行时流程执行数据
Act_ru_identitylink运行时节点人员数据信息
Act_ru_job计划任务数据
Act_ru_task运行时任务节点
Act_ru_variable过程变量数据
知道了这些数据的用途之后,我们就直接从用途说起吧。毕竟要看到用起来是什么样子,才能知道为什么这么香。
如果你自己不使用这些表,当你用IDEA创建一个关于Activiti的项目时,你会自动创建表,就像Hibernate一样。
使用IDEA创建Activiti项目。用IDEA创建一个项目,然后在POM文件中添加依赖关系groupid JUnit/groupid artifactid JUnit/artifactid version 4.12/version/dependency!- Activiti依赖导入-依赖groupIdorg.activiti/groupId工件Activity-Spring/工件ID版本5.18.0/版本/依赖依赖groupIdorg.activiti/groupId artifactidictiviti-engine/artifactId版本5 . 18 . 0/版本排除排除artifactId slf4j-API/artifactId groupidorg . slf4j/groupId/exclusion artifactId Spring-beans/artifactId groupIdorg.springframework/groupId/exclusion artifactId Jackson-core-ASL/artifactId groupIdorg.codehaus.jackson/groupId/exclusion exclusion artifactId commons-lang 3/artifactifactid groupidorg . Apache一定要有流程图吗?就像有些OA系统,你要先定义流程图,然后才能自动启动事情。我们画个流程图试试。
在src/main/resources下新建一个BPMN文件的流程图完成后,一个在IDEA中从未出现过的画面出现了。
看图片的右半部分。有很多像纽扣一样的标志吗?让我们解释一下它们是什么。
StartEvent: start event元素,通过启动流程实例,即发起流程,来作为流程的起点。配置起来既简单又复杂。End: EndEvent元素,Activiti工作流开始于开始任务,结束于任务用户任务:任务脚本用户操作任务:脚本任务服务任务:服务任务邮件任务:邮件任务手动任务:手动任务接收任务:接收任务业务规则任务:规则任务调用ActivityTask:调用其他流程任务子流程:流程池:池池Lane: Lane Alley(注意:Lane Alley放在池Pool中)并行网关:并行网关:独占网关:包含网关:事件网关:边界事件IntermediateCatchingEvent
在我们更改了图表之后,接下来我们将查看整个Activiti的配置文件,然后使用配置文件来生成表格。
activity.cfg.xml
?xml版本= # 34;1.0#34;编码= # 34;UTF-8 # 34;?beans xmlns = # 34接下来,我们使用这个配置来生成我们的数据表。
包com . activity . zhiyikeji . management;导入org . activiti . engine . process engine;导入org . activiti . engine . processengineconfiguration;导入org . JUnit . test;/* * * * @ class name leave flow * @ Author * @ Date 2021/6/11 14:06 * @ Description leave flow */public class leave flow { @ Test public void creatTable { ProcessEngine ProcessEngine = ProcessEngine configuration . createprocessengineconfigurationfromresource( # 34;activity . CFG . XML # 34;).buildProcessEngine}}执行时,我们来看看控制台打印的是什么,
然后检查您的数据库,看看它是否已经成功生成。看一下桌子的数量,通常是24张,
从数据包中取出的SQL脚本是一个附加的过程定义信息表。所以,这个表对于使用Activiti意义不大,没有它照样可以运行。
在我们创建了表之后,接下来我们将直接部署我们绘制的流程图,然后看看数据库的表中有什么样的数据。
/* * * Deploy leave process */@ test public void deployeeflow { process engine process engine = processengineConfiguration。CreateProcessengineConfiguration from resource( # 34;activity . CFG . XML # 34;).buildProcessEnginerepository service repository service = process engine . getrepository service;deployment builder builder = repository service . create deployment;builder . addclasspathresource( # 34;智一科二。BPMN # 34;);//bpmn文件的名称,builder.deploy}哎,提示完了,一次,没有错误,
14:32:50.747 [main] DEBUG org.activiti.engine.impl.interceptor.LogInterceptor - --- DeployCmd finished --------------------------------------------------------14:32:50.747 [main] DEBUG org.activiti.engine.impl.interceptor.LogInterceptor - 14:32:50.747[main]DEBUG org . activiti . engine . impl . interceptor . log interceptor--deploy cmd finished-14:32:50.74 7[main]DEBUG org . activiti . engine . impl . interceptor . log interceptor--
看到这里,我就放心了。我知道。好像我进去了,没有问题。让我们试着开始这个过程。
/* * *启动离开流程*/@ Test Public Void启动流程{ Process Engine Process Engine = ProcessEngineConfiguration。CreateProcessEngineConfiguration from resource( # 34;activity . CFG . XML # 34;).buildProcessEngineruntime service runtime service = processengine . getruntimeservice;runtime service . startprocessinstancebykey( # 34;leaveProcess # 34);//流程的名字,也可以用ByID启动流程}当我们启动完请假流程后,act_ru_task运行时任务节点表中有我们的一个任务,这样我们就可以看到这个任务是什么了。
这样看是不是有点太基础了?这东西看起来没有我们想象的那么高。然后,我们找一个开源项目,把工作流里的东西都运行一遍,然后把工作流的内容一个一个分析出来。
a粉找到了一个开源项目,还是不错的,特别感谢开源的大boss深湛王。先给你看图片,有兴趣可以下载。
毕竟开源不容易。如果你对这个感兴趣,可以下载看看。一粉之后,我会继续给大家讲讲Activiti绘制bpmn图过程中的所有内容。