如何在Flowable中执行有效的部署过程

时间:2019-03-22 19:08:56

标签: java spring-boot activiti bpmn flowable

我是Flowable的新手。我试图将BPMN部署创建到MYSQL,并且部署成功。

但是在“取消部署”过程中,我将所有部署存储在一个列表中,然后根据“我的标准”执行取消部署,例如如果resouceName和CompanyCode都匹配,那么我们将删除部署。

假设我们有更多部署,则无法将其存储在列表中,然后尝试将我的条件与整个列表匹配。

如何有效执行此操作。

public void deployResource(String resourceName, InputStream resourceStream, 
    String companyCode) {

    RepositoryService repoService = processEngine.getRepositoryService();
    DeploymentBuilder dbuilder = repoService.createDeployment();
    dbuilder.addInputStream(resourceName, resourceStream);
    dbuilder.name(resourceId);

    if (companyCode != null && !companyCode.isEmpty()) {
        logger.info("Setting Tenant ID with companyCode {}", companyCode);
        dbuilder.tenantId(companyCode);
    }
    dbuilder.deploy();
}

//这是取消部署方法

 public void undeploy(String resourceName, String companyCode) {
    try {

        logger.debug(LogMarker.ENTRY, "Undeployment Process {} is Started for Resource Name{}", resourceName, companyCode);

        RepositoryService repoService = processEngine.getRepositoryService();

        List<ProcessDefinition> list = repoService.createProcessDefinitionQuery().processDefinitionResourceNameLike(resourceName)
            .processDefinitionTenantIdLike(companyCode).list();

        for (ProcessDefinition processDefinition : list) {
            repoService.deleteDeployment(processDefinition.getDeploymentId(), true);

            logger.debug(LogMarker.EXIT, "Undeployment Process {} is Successfully Completed for Resource Name{}", resourceName);
            break;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:0)

为什么不查询Deployment,而不是查询流程定义?

您可以这样做:

List<Deployment> deployments = repositoryService.createDeploymentQuery()
    .deploymentTenantId(companyCode)
    .processDefinitionKey(processDefinitionKey)
    .list();

然后可以删除这些部署。请记住,当前进行取消部署的方式可能会删除与您的条件无关的流程定义,而这些流程定义是另一个流程定义的部署的一部分(您可以为每个部署部署多个流程定义)。