Activiti流程文件部署过程解析

2020-03-09 16:01:18丽君

用bpmn规范定义好一个流程得到流程定义文件后,需要把该文件部署到activiti的数据库后,这个流程才可以使用。

activiti中和流程定义相关的操作都需要使用RepositoryService这个服务组件来进行。

activiti中所有的服务组件都需要通过流程引擎对象来获取

一、RepositoryService服务组件

这个组件中提供了一系列管理流程定义和流程部署的api,我们可以使用这个组件中的api来部署流程

1.1 RepositoryService实例对象的获取

使用流程引擎对象的实例方法processEngine.getRepositoryService();来获取RepositoryService

  @Test
  public void test1() {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();
    System.out.println(repositoryService);
  }

二、流程部署信息的描述,Deployment对象

在讲解如何部署流程前,我们先了解下activiti如何描述流程的部署信息。activiti用Deployment这个接口来描述流程的部署信息,并自己提供了实现类。对应activiti数据库中的一张表ACT_RE_DEPLOYMENT

三、流程的部署

activiti使用DeploymentBuilder这个类的对象来部署流程,从这个类的名字就可以看出它的功能,部署一个流程并返回描述这次部署信息的对象。

使用RepositoryService服务组件的对象来获取DeploymentBuilder对象

DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();

然后给这个deploymentBuilder添加要部署的流程文件的位置

deploymentBuilder.addClasspathResource("process/process.bpmn");

我这里是在resources目录下创建了process/process.bpmn流程定义文件,所以添加了这个路径

还可以为本次部署添加名称和分类

deploymentBuilder.name("vacation-test").category("test");

最后执行部署

Deployment deploy = deploymentBuilder.deploy();

观察数据库ACT_RE_DEPLOYMENT表,会发现多了一条部署记录。

完整的代码为

  @Test
  public void test1() {
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    RepositoryService repositoryService = processEngine.getRepositoryService();
    DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
    deploymentBuilder.addClasspathResource("process/process.bpmn");
    deploymentBuilder.name("vacation-test").category("test");
    Deployment deploy = deploymentBuilder.deploy();
    System.out.println(deploy);
  }

注意,默认情况下多次部署同一流程图在表中会产生多条记录,用部署时间字段用来做区分

3.1 过滤重复部署的问题