Activiti技术流程部署

Activiti流程图做好后,我们需要把它部署到系统中,这样才能在系统中启动流程,以完成后续工作。部署流程有若干可行方法,这里根据我在项目中调试和正式使用的两种方法做一下简单的处理。
1、调试方法
该方法只在测试中使用

@Test
public void testActivitiHelloWorld(){
    //括号内为流程图文件的路径
    Deployment deployment = repositoryService.createDeployment().addClasspathResource("configs/activiti/xxx.bpmn").deploy();
}

2、实际使用
在实际使用时,我们不可能每次都去junit测试方法中测试,基本都会用到上传文件的方式。在这里,我是通过js上传文件到后台,再部署流程。(这里js上传方法就忽略了)。文件上传时会有上传多个文件的功能,所以把多文件上传写成Map集合。
用到多文件文件MultipartFile时,这里主要配置springmvc解析器CommonsMultipartResolver等,内容如下:

<!-- 上传文件时需要用到的分解层,默认将编码转为urf-8,设置最大上传容量 ,最大内存-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
    <property name="defaultEncoding" value="UTF-8" />           <!-- 默认编码 (ISO-8859-1) -->
    <property name="maxInMemorySize" value="20480" />           <!-- 最大内存大小 (10240),以byte为单位 -->
    <property name="uploadTempDir" value="/WEB-INF/uploads/" /> <!-- 上传后的目录名 (WebUtils#TEMP_DIR_CONTEXT_ATTRIBUTE) -->
    <property name="maxUploadSize" value="-1" />                <!-- 最大文件大小,-1为无限止(-1),以byte为单位 -->
</bean>

文件上传后,后台处理如下:

@RequestMapping("/deployXMLUpload")
@ResponseBody
public Map<String, Object> uploadFlowXml(MultipartHttpServletRequest request, ActionValueAssistant actionValueAssistant) {

    Map<String, Object> result = new HashMap<String, Object>();
    // 获取文件map集合
    Map<String, MultipartFile> namemap = request.getFileMap();
    // 循环遍历,取出单个文件
    for(Map.Entry<String, MultipartFile> key:namemap.entrySet()) {
        // 创建文件存放路径实例
        String rootPath = request.getRealPath("files");
        File fileDir = new File(rootPath, "deloyUpload");
        // 判断文件夹不存在就创建
        if(!fileDir.exists()) {
            fileDir.mkdirs();
        }
        //getOriginalFilename() 获取上传文件的原名
        File testFile= new File(fileDir, key.getValue().getOriginalFilename());
        try {
            //transferto()方法,是springmvc封装的方法,用于图片上传时,把内存中图片写入磁盘
            key.getValue().transferTo(testFile);
            //调用DeployXml(File deployFile)方法
            boolean flag =  wTWorkFlowOperationService.DeployXml(testFile);

            if(flag) {
                result.put("result", 1);
                result.put("msg", "部署成功!");
            }
        } catch (IllegalStateException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            result.put("result", 0);
            result.put("msg", "部署失败!"+ e.getMessage());
        }

    }
    return result;
}

DeployXml(File deployFile)方法如下:

/**
 * 部署文件
 * @param deployFile
 * @return
 */
public boolean DeployXml(File deployFile){
    try {
        DeploymentBuilder deployBuilder = repositoryService.createDeployment();
        String fileName = deployFile.getName();
        if(fileName.endsWith(".xml") || fileName.endsWith(".bpmn")) {
            //deployBuilder.addClasspathResource(deployFile.getAbsolutePath()).deploy();
            deployBuilder.addInputStream(fileName, new FileInputStream(deployFile)).deploy();
        }else if(fileName.endsWith(".zip") || fileName.endsWith(".bar")) {
            try {
                deployBuilder.addZipInputStream(new ZipInputStream(new FileInputStream(deployFile.getAbsolutePath()))).deploy();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return true;
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return false;
    }   
}

在这里,顺便说一下获取所有部署的流程:

/**
 * 获取所有部署的流程图
 * @return 
 */
public List<Deployment> queryAllDeploy(){
    return repositoryService.createDeploymentQuery().orderByDeploymenTime().desc().list();
}

public List<ProcessInstance> queryAllInstance() {
    //return historyService.createHistoricProcessInstanceQuery().orderByProcessInstanceStartTime().desc().list();
    return runtimeService.createProcessInstanceQuery().orderByProcessInstanceId().desc().list();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值