还有一些较重要的services,详细请自行查看activiti apihtml
activiti 会自动建表。因此在与spring集成时,须要指定与数据库相关的bean。
当这些都准备好时,初始化spring.xml 时 activiti 的引擎会自动帮助把activiti相关的表建立好。
针对这些表的详细信息可参考:- 数据库设计说明书java
根据上面给的几个连接,差很少就能本身慢慢倒腾出来一个本身的工做流了,这里记录下我学习的所得。git
这是工做流开发的前提。可是刚入门可能不知道这个东西怎么定义。我开始都是找现有定义好的流程拿来使用,后面学习到了必定的时候再定义本身的。github
流程定义好了,须要部署到引擎中来。便于后续的工做。(部署一次就好,不用屡次部署)web
流程定义会保存到持久化的数据存储里spring
部署分下列几种方式:数据库
编程式部署,即在程序中将以有的流程定义进行部署(暂时用的就是这种)编程
代码示例:api
Deployment deployment = repositoryService.createDeployment().addClasspathResource("activitiDemo.bpmn20.xml").deploy();
经过 Activiti Explorer 方式部署 。即 Activiti web控制台容许你经过web界面的用户接口上传一个bar格式的压缩文件(或者一个bpmn20.xml格式的文件)。 选择Management 标签 和 点击 Deployment数据库设计
部署成功后,会自动生成一个部署的ID,标识部署成功的流程定义。
在数据库层作的操做:
act_re_deployment
表中保存部署成功生成的记录(主要时id,跟部署时间)act_re_procdef
表中存放启动流程定义的信息 部署好流程定义后,咱们就能够启动一个流程实例。 (开始学习时,建议启动一个流程跑完,不要重复启动)
在启动这个流程有不少不一样方法,也重载了不少方法。详见:startProcessInstanceBy**
固然最简单就是只给流程定义ID(不是指流程定义部署成功后获得的ID,而是bpmn20.xml 里面的 process id="activitiDemo") 。 这一点在用户指南上也有说明。
代码示例:
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("activitiDemo");
注: 部署与启动之间关系: 一个部署好的流程能够屡次启动,每次启动都会获得一个ID。
在数据库层面的操做:
act_ru_execution
存放启动成功的流程实例act_ru_identitylink
存放用户相关的信息(着须要在启动时指定一个用户 map)act_ru_task
存放用户任务相关的信息act_ru_variable
存放一些运行时的相关变量在启动一个流程后,那么这个流程就进入运行状态中。
当流程定义中有UserTask时,那么activiti引擎则会自动将task 持久化到数据库。
这时咱们须要去处理完成任务,让流程继续到下一节点,或者流程结束。
我在xml,只有简单的流程,定义了UserTask,但没有指定任务处理人因此这里我只须要去完成该任务就ok。
代码示例:
List<Task> taskList = taskService.createTaskQuery().processDefinitionKey("activitiDemo").list(); taskService.complete(taskList.get(0).getId());
完整代码请点击这里: Activiti_Simple
一个复杂的流程中还涉及 用户,businessKey 。 流程定义中会出现 userTask ,指定任务处理人或者组(须要用户来签收,处理)。这些都在用户指南有示例。 后续我会跟进。