Activiti快速入门(三)—— 部署你的第一个流程
部署流程的2大前提:
- 流程引擎
- 流程定义文件
流程引擎就不再多说了,无论是前面的哪种方式获取的,在部署上是一致的。
流程定义文件需要通过IDEA的、eclipse 中的 Activiti designer插件或者Web 编辑器Activiti modeler来的设计,且得到一个以.bpmn为后缀的流程定义文件
安装完成插件后在Eclipse 右键new—Other—Activiti Diagram即可新建流程定义文件
Activiti designer插件设计界面如下
IDEA 安装完成插件后在任意目录下右键new BpmnFile 即可新建流程定义文件
actibpm 插件设计界面如下
这里如果遇到actiBPM插件中文乱码则需要在IDEA安装目录下找到idea.exe.vmoptions和idea64.exe.vmoptions这两个文件,且在最后一行添加如下配置
-Dfile.encoding=UTF-8
设计器中有很多元素可以供我们选择,但是在入门阶段,我认为只需要关注StartEvent UserTask EndEvent 这3个元素即可,简单场景下,也只会用到这3个。
设计器元素在我们定义好了流程定义文件后,就可以使用流程引擎部署它了,前提是你已经搭建好了Activiti的项目环境,这里可以参考快速入门(二)
@Test
public void deployMyProcess() throws FileNotFoundException {
//几乎所有需要操作到流程文件,或者读取流程相关信息的,都是使用仓库服务repositoryService
//部署流程 这里跟构建流程引擎的方式差不多,都是使用了构建者模式
//1. 首先创建DeploymentBuilder对象,通过这个对象,我们可以指定要加载的流程定义文件,以及一些其他属性。
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
//2.1 加载流程文件,从类路径加载
// deploymentBuilder.addClasspathResource("AskForLeave.bpmn");
//2.使用InputStream加载
FileInputStream fileInputStream = new FileInputStream("E:\\YS2000\\DemoProjects\\ActivitiExample\\ActivitiFirstDeploy\\src\\main\\resources\\AskForLeave.bpmn");
deploymentBuilder.addInputStream("AskForLeave.bpmn", fileInputStream);
deploymentBuilder.name("测试部署请假流程");
//还有将多个bpmn文件打包批量,以及字符串这两种部署方式(这里暂时不介绍这两种方式)
//执行部署,直到调用deploy()方法才是真正的部署到引擎中了
//同时会在act_ge_bytearray ,act_re_deployment ,act_re_procdef这3个表中插入相关信息
//与以前的教程不一样的是,别的教程中会经常将流程图片和流程bpmn文件一起部署,但我认为有点多余了,因为在部署bpmn的时候会自动生成流程图片
Deployment deploy = deploymentBuilder.deploy();
//这个是创建一个部署查询对象查询,查询的是act_re_deployment表这个表记录的就是deploymentBuilder对象所附加的属性
long count = repositoryService.createDeploymentQuery().count();
System.out.println("部署时间:"+deploy.getDeploymentTime());
Assert.assertEquals(1, count);
}
在流程部署完成后,我们来看一看数据库的变化,学习Activiti引擎就必须要对这20多张表有一个比较深刻的了解。
部署一个流程,数据库中有act_ge_bytearray ,act_re_deployment ,act_re_procdef这3个表会发生变化
-
act_re_deployment 中插入了deploymentBuilder构建时所附带的信息,比如name,key,category等但是这几个信息都是非必填项,目前即便是为空也不影响,主要是为了定义和区分不同的部署信息。
act_re_deployment -
act_re_procdef 这个表中插入的是比较重要的信息了,这里面的Name,Key,Category 等等都是流程引擎从我们自己设计的AskForLeave.bpmn这个流程定义文件中解析出来的属性,在实际业务中最常关联的也就是这个表中的属性。
act_re_procdef -
act_ge_bytearray在第一节中有提到过ge系列的是通用数据,可以看成是系统将我们的bpmn文件以及它解析这个文件生成的流程图片以二进制的形式保存到这个表中了
act_ge_bytearray