Java 如何在Flowable中执行有效的取消部署过程
我不熟悉流动性。我试图创建到MYSQL的BPMN部署,它已经成功部署 但在取消部署过程中,我将所有部署存储在一个列表中,然后根据我的条件执行取消部署,比如如果ResourceName和CompanyCode都匹配,那么我们将删除部署 假设我们有更多的部署,我们不能将其存储在列表中,然后尝试用整个列表匹配我的条件 如何才能有效地执行此操作Java 如何在Flowable中执行有效的取消部署过程,java,spring-boot,activiti,bpmn,flowable,Java,Spring Boot,Activiti,Bpmn,Flowable,我不熟悉流动性。我试图创建到MYSQL的BPMN部署,它已经成功部署 但在取消部署过程中,我将所有部署存储在一个列表中,然后根据我的条件执行取消部署,比如如果ResourceName和CompanyCode都匹配,那么我们将删除部署 假设我们有更多的部署,我们不能将其存储在列表中,然后尝试用整个列表匹配我的条件 如何才能有效地执行此操作 public void deployResource(String resourceName, InputStream resourceStream,
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();
}
}
public void取消部署(字符串resourceName,字符串companyCode){
试一试{
debug(LogMarker.ENTRY,“为资源名{}、资源名、公司代码启动取消部署进程{}”);
RepositoryService repoService=processEngine.getRepositoryService();
List List=repoService.createProcessDefinitionQuery().processDefinitionResourceNameLike(resourceName)
.ProcessDefinitionTenantId(公司代码).list();
for(ProcessDefinition ProcessDefinition:list){
repoService.deleteDeployment(processDefinition.getDeploymentId(),true);
debug(LogMarker.EXIT,“资源名称{}”的取消部署过程{}已成功完成,resourceName);
打破
}
}捕获(例外e){
e、 printStackTrace();
}
}
与其查询流程定义,为什么不查询部署
你可以做:
List<Deployment> deployments = repositoryService.createDeploymentQuery()
.deploymentTenantId(companyCode)
.processDefinitionKey(processDefinitionKey)
.list();
List deployments=repositoryService.createDeploymentQuery()
.deploymentTenantId(公司代码)
.processDefinitionKey(processDefinitionKey)
.list();
然后可以删除这些部署。请记住,您当前执行取消部署的方式可能会删除与您的临界值不匹配的流程定义,但这些定义是另一个流程定义部署的一部分(您可以在每次部署中部署多个流程定义)。您好,您能解释一下,
我们无法存储在列表中
?现在我正在读取所有已部署的资源,但我如何才能尝试使用资源名称和tenantId的组合来获取特定的部署。假设我们有500个部署,那么我需要将我的所有部署存储在一个列表中,然后尝试与所有元素进行匹配。如何在创建查询时使用这些过滤器,而不是将它们存储在列表中,以高效地执行@ARPITAGRAWALL?和这些筛选器将直接从数据库中只提供所需的行。如何使用:ProcessDefinitionQuery processDefinitionResourceNameLike=repoService.createProcessDefinitionQuery()。processDefinitionResourceNameLike(resourceName);和ProcessDefinitionTenantId like与我的代码@ArpitAgrawalLike如下:List List=repoService.createProcessDefinitionQuery().processDefinitionResourceNameLike(resourceName).ProcessDefinitionTenantId like(tenantId).List()代码>我将根据匹配条件取消部署,如ResourceName作为deploymentId,tenantId作为companyCode。如何获取processDefinitionKeyTheresourceName
不是deploymentId
。processDefinitionKey
是BPMNXML中的进程id