Skip to content

Deploy ProcessDefine

scutuyu edited this page May 18, 2018 · 2 revisions

部署流程定义

部署之后的流程定义时不能修改的,那如何控制修改呢?使用流程定义的key相同的情况下,实现版本升级。

通过资源文件的方法部署流程定义

资源文件夹下保证有leave.bpmnleave.png文件,如果没有png文件,框架会根据bpmn文件自动生成png图片

RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deploy = repositoryService.createDeployment() // 创建部署对象
                .name("资源文件部署") // 添加部署对象
                .addClasspathResource("leave.bpmn") // 加载资源, 当流程定义的key值相同,则版本升级
                .addClasspathResource("leave.png") // 加载资源,如果没有加载图片,那么将会自动生成图片存在数据库
                .deploy(); // 完成部署

通过zip压缩包来部署流程定义

确保资源文件夹下有一个名为leave.zip的压缩包,且压缩包中有leave.bpmnleave.png文件

RepositoryService repositoryService = processEngine.getRepositoryService();
InputStream inputStream = ResourceUtil.getInputString(this.getClass(), "leave.zip");
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        Deployment deploy = repositoryService.createDeployment() // 创建部署对象
                .name("zip方式部署") // 添加部署对象
                .addZipInputStream(zipInputStream)
                .deploy(); // 完成部署

通过inputStream流的方式部署流程定义

RepositoryService repositoryService = processEngine.getRepositoryService();
String bpmn = "leave.bpmn";
        String png = "leave.png";
        InputStream inputStreamBpmn = ResourceUtil.getInputString(this.getClass(), bpmn);
        InputStream inputStreamPng = ResourceUtil.getInputString(this.getClass(), png);
        Deployment deploy = repositoryService.createDeployment() // 创建部署对象
                .name("inputStream流部署") // 添加部署对象
                .addInputStream(bpmn, inputStreamBpmn) // 使用资源文件名称(要求与资源文件的名称一致)和输入流完成部署
                .addInputStream(png, inputStreamPng) // 使用资源文件名称和输入流完成部署
                .deploy(); // 完成部署

public class ResourceUtil {
    private static final Logger logger = LoggerFactory.getLogger(ResourceUtil.class);

    public static final InputStream getInputString(Class c, String fileName){
        if (c == null || fileName == null || "".equals(fileName)){
            logger.error("param exception");
            return null;
        }
        return c.getClassLoader().getResourceAsStream(fileName);
    }
}

流程定义部署成功后,数据库中有3张表被修改

  • act_re_deployment(部署对象表)
  • act_re_procdef(流程定义表)
  • act_ge_bytearray(资源文件表)

顺便提一下java中加载资源文件的3中方式

  1. 类加载器加载资源文件,在classpath根目录加载指定文件夹下的指定文件,比如:this.getClass().getClassLoader().getResourceAsStream("dir/file.properties");
  2. 从当前包下加载指定文件夹下的指定文件,比如:this.getClass().getResourceAsStream("dir/file.properties");
  3. 从classpath根目录下加载指定文件夹下的指定文件,比如:this.getClass().getResourceAsStream("/dir/file.properties");与第二种方式相比,路径开头多了一个斜杠,多了一个斜杠就和第一种方式一样了