用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 过滤重复部署的问题










