忘记说明了,我的activiti版本是5.22的
关于activiti流程部署问题,网上百度基本上都是三种形式,然后我自己尝试,感觉弄出了第四种。
百度activiti部署方式,找到最多的就是三种部署方式就是这位老哥的
https://blog.csdn.net/artaganan8/article/details/77847512
我觉得写得很好,我用的时候,反正第一种我不知道那个png在哪获取
第二种要上传,还要获取png也不想用
第三种是直接获取xml的文件进行部署,但是文件也要上传,然后获取内容的,每次部署都要去下载xml的文件,我也嫌麻烦
然后我就自己鼓捣了一种:
最开始用的时候,我是把activiti的前端,也就是流程设计器集成到我自己的springcloud项目中,做了一个列表,查询所有model,以及对model的更改,然后我就很好奇这个xml的文件更改完了是存在哪里的
在activiti自己生成的数据库中有一个ACT_GE_BYTEARRAY(通用的流程定义和流程资源)的表。我发现每次流程设计器上修改完了,都会把xml存在这个表中的,不相信的可以去哪一个下载下来的,然后去这个表找出对应的比较一下,会发现完全一样。
然后知道了这个关系就简单了,我是不是可以用上面大佬的第三种方式,但是需要部署的内容又是直接从数据库获取呢。然后我就自己尝试着做了一下:
public ResultInfo deploy(WorkClassifyDto workClassifyDto) throws UnsupportedEncodingException {
String processId = workClassifyDto.getProcessId();
String name = workClassifyDto.getProcessName();
ObjectNode modelNode = null;
try {
(A)modelNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(processId));
} catch (JsonProcessingException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
(B) BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);
Model mocalData = repositoryService.getModel(processId);
String tset = new String(bpmnBytes,"utf-8");
try {
String processName = name + ".bpmn20.xml";
Deployment deployment = repositoryService
.createDeployment()
.name(name)
.addString(processName, new String(bpmnBytes,"utf-8"))
.deploy();
logger.info("部署ID:"+deployment.getId());
logger.info("部署时间:"+deployment.getDeploymentTime());
//获取流程key
//Deployment deployment2 = repositoryService.createDeploymentQuery().deploymentId(deploymentId);
//部署资源id存到model表
mocalData.setDeploymentId(deployment.getId());
repositoryService.saveModel(mocalData);
WorkClassify workClassify = new WorkClassify();
BeanUtil.copyProperties(workClassifyDto, workClassify);
//workClassify.setId(workClassifyDto.getId());
//workClassify.setState("1");//0:未部署 1:已部署 2:已启用 3:已禁用
workClassifyMapper.updateByPrimaryKeySelective(workClassify);
return ResultInfo.success("部署成功");
} catch (Exception e) {
logger.info("部署失败");
return ResultInfo.fail("部署失败");
}
}
贴上了我详细的代码,我的代码涉及到了我的业务,所以仅供参考,
在A处根据modelid去获取到了对应的资源数据
在B处对资源文件做了一个转换,test是为了我方便查看内容的,进行了一个转码,这个test拦截到的,实际上就是我们导出出来的xml文件内容。
然后对文件进行一下处理之后,调用最上面提到的,那位老哥写的第三种根据String方式进行部署了