Springboot +Flowable,详细解释啥叫流程实例(一)
一.简介
上一篇中学习了Flowable 中的流程模板(流程定义)的部署问题,这一篇来学习什么叫流程实例。
部署之后的流程模板,还不能直接运行,例如我们部署了一个请假流程,现在 张三想要请假,他就需要开启一个请假流程,李四 想请假,他也需要开启一个请假流程,这开启的请假流程就是流程实例,**而我们一开始部署的请假流程,则类似于一个模版,基于此模版,我们可以开启很多个具体的流程实例。
**从这个角度来看,之前定义的 ProcessDefinition 就类似于一个 Java 类,今天要学习的 ProcessInstance 则相当于一个 Java 对象。
二.捋清概念:
首先我们需要先捋清三个概念:
流程定义 ProcessDefinition
流程实例 ProcessInstance
执行实例 Execution
1.流程定义 ProcessDefinition
流程定义 ProcessDefinition 。将一个流程 XML 文件部署到 flowable 中,这就是一个定义好的流程了,基于这个定义好的流程,我们可以开启很多流程实例。
2.流程实例 ProcessInstance
流程实例 ProcessInstance 就是通过流程定义启动的一个流程,他表示一个流程从开始到结束的最大的流程分支,流程实例和流程定义的关系就类似于 Java 对象和 Java 类之间的关系。
3.执行实例 Execution
执行实例 Execution 稍微有点难以理解。
首先从类的关系上来看,ProcessInstance 就是 Execution 的子类。
流程实例通常是执行实例的根结点,即在一个流程中,出口和入口可以算是一个流程实例的节点,而中间的过程则是执行实例。
假如流程本身就是一条线,那么流程实例和执行实例基本上是一样的,但是如果流程中包含多条线,例如下图:
这张图中有并行网关,并行任务执行的时候,每一个并行任务就是一个执行实例,这样大家就好理解了。
结论就是:在一个流程实例中,除了开始和结束之外,其他的都是执行实例。即使流程只有一条线,中间的也都是执行实例,只不过此时的执行实例等于流程实例而已。
三.五种流程启动方式
当我们将流程部署好之后,接下来启动流程,我们有五种不同的方式去启动一个流程。
1.通过流程定义的 id 去启动
首先就是通过流程定义的 id 去启动一个流程,对应的方法名称就是 RuntimeService#startProcessInstanceById,该方法有好几个重载的方法,不同的重载方法只是传递的参数不同而已,其他基本上都是一样的。
2.通过流程的 key 去启动
也可以通过流程定义的 key 去启动一个流程,这个流程定义的 key 其实就是流程 XML 文件中的 id,这个对应的方法名是 RuntimeService#startProcessInstanceByKey。
3.通过流程的 key+tenantId 去启动
有这样一种情况,例如我有两个子系统 A 和 B,A 和 B 中都有一个请假流程的定义,现在当我想要启动一个流程的时候,怎么知道是启动 A 的请假流程还是启动 B 的请假流程呢?此时我们可以通过租户 ID 即 tenantId 去区分,所以,流程启动就还有一个方法 RuntimeService#startProcessInstanceByKeyAndTenantId。
4.通过流程的 message 去启动
通过消息去启动一个流程,对应的方法是 RuntimeService#startProcessInstanceByMessage。
5.通过流程的 message+tenanId 去启动
通过消息+租户 ID 去启动一个流程,对应的方法是 RuntimeService#startProcessInstanceByMessageAndTenantId。
《肖申克的救赎》
生命可以归结为一种简单的选择:要么忙于生存,要么赶着去死。
懦怯囚禁人的灵魂,希望可以感受自由。强者自救,圣者渡人。
希望是件美丽的东西,也许是最好的东西。美好的东西是永远不会死的。
每个人都是自己的上帝。如果你自己都放弃自己了,还有谁会救你?
《熔炉》
我们一路奋战,不是为了能改变世界,而是为了不让世界改变我们。
现实如水母,看似美好无害实质总是致命伤人。
我们来到世界上,都是孤独的旅行,即使身边有人相伴,最终也会各奔东西!
世界上最美丽最珍贵的,反而是听不见且看不清的,只有用心才能感受得到。
《教父》
人可以不断犯错,但绝不能犯要命的错。
不要憎恨你的敌人,那会影响你的判断力。
人并非生来就伟大,而是越活越伟大。
《活着》
人是为了活着本身而活着,而不是为了活着之外的任何事物而活着。
以笑的方式哭,在死亡的伴随下活着。
没有什么比时间更具有说服力了,因为时间无需通知我们就可以改变一切。
你的命是爹娘给的,你不要命了也得先去问问他们。
《我不是药神》
世界上只有一种病,穷病,这种病你没法治,你也治不过来。
人间最高贵的是善良,是对生命的致敬。
《指环王》
把手握紧,里面什么也没有;把手放开,你得到的是一切。
我宁愿和你共度凡人短暂的一生,也不愿一个人看尽这世界的沧海桑田。
20.幸福的家庭都是相似的,不幸的家庭各有各的不幸。
或许有一天,人类变得萎缩懦弱,舍弃朋友,断绝友谊,但今天决不会这样。
《饮食男女》
22.人生不能像做菜,把所有的材料都准备好了才下锅。
什么叫做“可惜”啊,要心中有个“惜”字儿,才知道可惜。
其实一家人,住在一个屋檐下,照样可以各过各的日子,可是从心里产生的那种顾忌,才是一个家之所以为家的意义。
《让子弹飞》
世界上本没有路,有了腿便有了路。
如果你活着,早晚都会死;如果你死了,你就永远活着。
赚钱嘛,不寒碜