☃️8.1 部署流程
官方提供了2种方式的部署。
8.1.1 部署方式1-源文件
这种部署方式需要将 流程图文件 放在如下路径中(process文件与src文件同类型属于Source Folder),这样通过如下方式1部署时不会出现路径问题。
部署代码:
//部署方式1 @Test void deploy1(){ //使用默认配置文件,获取流程引擎 ProcessEngine processEngine = Configuration.getProcessEngine(); String deployId = processEngine.getRepositoryService() .createDeployment() .addResourceFromClasspath("aaa.jpdl.xml") .addResourceFromClasspath("aaa.png") .deploy(); System.out.println("部署方式1 : deployId:" + deployId); }
执行上面的代码后,控制台打印如下:
此时数据库表有如下变化:
数据定义表(jbpm4_deployment ) 多了一个字段 :id为 1500001 的流程定义,如下图示。
数据定义属性表(jbpm4_deployprop)也有变化,具体自己部署查看下。
8.1.2 部署方式2-zip包
以.zip压缩包的方式部署,我们将 画图产生的两个文件 打包成 .zip压缩包文件,放在如下图示的位置。
该种方式部署代码如下:
// 部署方式2 ZIP压缩文件 @Test public void deploy2(){ ProcessEngine processEngine = Configuration.getProcessEngine(); InputStream in = this.getClass().getClassLoader().getResourceAsStream("test.zip"); ZipInputStream zipInputStream = new ZipInputStream(in); // 部署 String deployId = processEngine.getRepositoryService() .createDeployment() .addResourcesFromZipInputStream(zipInputStream) .deploy(); System.out.println("部署方式2 : deployId:" + deployId); }
执行完上面部署代码后,控制台打印如下:
部署方式2 : deployId:1510001
注意:
就我们的demo而言:部署方式1 和 部署方式2 此时部署的其实是同一个流程,只是部署方式不一样。
所以其实是将同一个流程部署了两次。表现在数据库表中就是有两个版本的流程部署了。
版本号在第一次部署默认为1,后面部署相同的流程版本号会自动+1。
数据定义属性表(jbpm4_deployprop)数据:
☃️8.2 查询流程实例
部署后就能查到流程定义。
8.2.1 查询所有
查询所有已经部署的流程定义,代码如下(会查询所有已经部署的流程定义,多版本也会一起返回)
//查询所有流程定义 @Test public void findAll(){ List<ProcessDefinition> list = processEngine.getRepositoryService() .createProcessDefinitionQuery() .orderAsc(ProcessDefinitionQuery.PROPERTY_KEY) .list(); // 展示数据 List<Map<String, String>> resultList = new ArrayList<Map<String,String>>(); for(ProcessDefinition d : list){ Map<String, String> map = new HashMap<>(); map.put("id",d.getId()); map.put("name",d.getName()); map.put("key",d.getKey()); map.put("version",String.valueOf(d.getVersion())); map.put("deploymentId",d.getDeploymentId()); resultList.add(map); } System.out.println(resultList); }
执行上面的查询代码马,控制台打印如下:
[{deploymentId=760001, name=applyFor, id=applyFor-1, version=1, key=applyFor}, {deploymentId=1440015, name=groupTest1125, id=groupTest1125-1, version=1, key=groupTest1125}, {deploymentId=1350008, name=leave, id=leave-1, version=1, key=leave}, {deploymentId=1500001, name=test, id=test-1, version=1, key=test}, {deploymentId=1510001, name=test, id=test-2, version=2, key=test}, {deploymentId=990001, name=test11220846, id=test11220846-1, version=1, key=test11220846}, {deploymentId=980009, name=testGroup2, id=testGroup2-1, version=1, key=testGroup2}]
8.2.2 查询所有最新版本的流程定义
会查询出每个Key下的最新版本,后面我们的启动就是按照指定key下的最新版本启动的
// 查询所有最新版本的流程定义 @Test public void findAllLastVersion(){ List<ProcessDefinition> list = processEngine.getRepositoryService() .createProcessDefinitionQuery() .orderAsc(ProcessDefinitionQuery.PROPERTY_VERSION) .list(); // 过滤 过滤出最新版本 Map<String, ProcessDefinition> mapBefore = new HashMap<String, ProcessDefinition>(); for(ProcessDefinition definition : list){ mapBefore.put(definition.getKey(),definition); } // 展示数据 List<Map<String, String>> resultList = new ArrayList<Map<String,String>>(); for(ProcessDefinition d : mapBefore.values()){ Map<String, String> map = new HashMap<>(); map.put("id",d.getId()); map.put("name",d.getName()); map.put("key",d.getKey()); map.put("version",String.valueOf(d.getVersion())); map.put("deploymentId",d.getDeploymentId()); resultList.add(map); } System.out.println(resultList); }
执行上面的查询代码后,控制台打印如下:
[{deploymentId=990001, name=test11220846, id=test11220846-1, version=1, key=test11220846}, {deploymentId=1510001, name=test, id=test-2, version=2, key=test}, {deploymentId=980009, name=testGroup2, id=testGroup2-1, version=1, key=testGroup2}, {deploymentId=1350008, name=leave, id=leave-1, version=1, key=leave}, {deploymentId=1440015, name=groupTest1125, id=groupTest1125-1, version=1, key=groupTest1125}, {deploymentId=760001, name=applyFor, id=applyFor-1, version=1, key=applyFor}]
注意与查询所有的结果比较:key 为 test 的结果只有一条了,且version=2。