如何自己开网站软文外链代发
Activiti工作流介绍
Activiti是一个开源的工作流和业务流程管理系统。它是由Joram Barrez和Tijs Rademakers在2009年创建的,这两个人都是JBoss jBPM项目的核心开发人员。他们离开JBoss之后,开始自己的项目,并基于他们的经验创造了Activiti。Activiti是一款轻量级的流程引擎,是第一个与BPMN 2.0标准完全兼容的流程引擎,并且使用了标准Java开发。它是一款可嵌入的引擎,可以与Spring等框架集成,使开发人员能够集中精力于定义和执行流程。
工作流
⼯作流(Workflow),指“业务过程的部分或整体在计算机应⽤环境下的⾃动化”。是对⼯作流程及其各操作步骤之间业务规则的抽象、概括描述。
⼯作流主要解决的主要问题是:为了实现某个业务⽬标,利⽤计算机在多个参与者之间按某种预定规则⾃动传递⽂档、信息或者任务。
⽬的是通过将⼯作分解成定义良好的任务或⻆⾊,按照⼀定的规则和过程来执⾏这些任务并对其进⾏监控,达到提⾼⼯作效率、更好的控制过程、增强对客户的服务、有效管理业务流程等⽬的。
Activiti概述
Activiti项⽬是⼀项新的基于Apache许可的开源BPM平台,BPM,即Business Process Management,业务流程管理,通常,BPM也指针对流程管理的信息化系统,其特点是注重流程驱动为核⼼,实现端到端全流程信息化管理。
BPMN,即Business Process Modeling Notation,业务流程建模符号。BPMN定义了⼀个业务流程图(Business Process Diagram),该业务流程图基于⼀个流程图(flowcharting),该流程图被设计⽤于创建业务流程操作的图形化模型。⽽⼀个业务流程模型(Business Process Model),指⼀个由图形对象(graphical objects)组成的⽹状图,图形对象包括活动(activities)和⽤于定义这些活动执⾏顺序的流程控制器(flow controls)。
IDEA安装actiBPM
第一步:去IDEA官方市场下载actiBPM插件,下载地址
IDEA官方市场:https://plugins.jetbrains.com/
第二步、解压下载好的jar包
第三步、产看IDEA的版本
第四步、编辑META-INF目录下的plugin.xml
1. 将<idea-version since-build="123.001"/>修改为<idea-version since-build="201.7223.91" until-build="201.7223.91"/> # 201.7223.91为自己IDEA的版本
2. 将<depends>com.intellij.modules.xml</depends>修改为<depends>com.intellij.modules.java</depends>
3. 将<version>3.E-8</version>修改为<version>201.7223.91</version># 201.7223.91为自己IDEA的版本
第五步、将所有的解压并修改好的文件进行压缩,压缩完成后重命名为actiBPM.jar
第六步、打开IDEA的File->Settings->Plugins安装插件
Activiti快速开始
第一步、创建Activiti所需要的数据库,无需创建表,项目启动后会自动在指定的数据源中创建表,在BPMN中,主要有以下几种表:
1. 流程定义表:存放流程的基本信息,包括流程名称、流程编号、版本号、流程描述等;2. 流程节点表:存放流程中的各个节点,包括开始节点、结束节点、活动节点、网关等,以及它们之间的连接关系3. 流程实例表:存放流程实例的基本信息,包括流程实例ID、流程定义ID、流程启动时间、当前节点信息等;4. 任务表:存放流程中的各个任务信息,包括任务ID、任务名称、任务描述、任务处理人、任务开始时间、任务结束时间等;5. 历史表:存放流程的历史记录信息,包括流程实例的历史状态、任务的历史处理记录、变量的历史记录等。
第二步、所需依赖
<dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>7.0.0.Beta1</version>
</dependency>
<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>7.0.0.Beta1</version>
</dependency>
<dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>7.0.0.Beta1</version>
</dependency>
<dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>7.0.0.Beta1</version>
</dependency>
<dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>7.0.0.Beta1</version>
</dependency>
<!-- <dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>7.0.0.Beta1</version>
</dependency>-->
<dependency><groupId>org.activiti.cloud</groupId><artifactId>activiti-cloud-services-api</artifactId><version>7.0.0.Beta1</version>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version>
</dependency>
第三步:创建Activiti所需要的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 数据源 --><bean id="activitiDatasource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://192.168.11.136/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=Hongkong&useSSL=false"/><property name="username" value="root"/><property name="password" value="123456"/></bean><!-- 配置Activiti使用的processEngine对象 --><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!-- 注入数据源 --><property name="dataSource" ref="activitiDatasource"/><!-- 自动的生成Activiti数据库中的表 --><property name="databaseSchemaUpdate" value="true"/></bean></beans>
第四步、自动创建Activiti数据库表
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-conf.xml");
ProcessEngine processEngine = configuration.buildProcessEngine();
Activiti创建的数据库表
Activeti提供的六大Service服务
Activiti⼯作流框架除了提供数据库的25张表外,还提供了Service服务层供我们使⽤。在项⽬中直接使⽤Service服务层接⼝,就可以实现⼯作流相关的业务功能。
RepositoryService仓储服务: 部署流程图、下载流程部署相关的资源
仓储服务可以⽤来部署我们的流程图,还可以创建我们的流程部署查询对象,⽤于查询刚刚部署的流程列表,便于我们管理流程
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-conf.xml");ProcessEngine processEngine = configuration.buildProcessEngine();// 通过流程处理引擎工具类获取默认的流程处理引擎,getDefaultProcessEngine方法内部是通过读取默认的xml配置文件:resources = classLoader.getResources("activiti.cfg.xml");// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();Deployment deploy = repositoryService.createDeployment().addClasspathResource("bpmn/procure.bpmn").addClasspathResource("bpmn/procure.png").name("离职审批流程").deploy();
部署流程图实则是将流程图信息添加到数据库中:流程图名称、xml信息、bpmn信息…
// 下载相关的资源// 搜先获取流程定义对象ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId("").singleResult();InputStream pngResourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),// 从流程定义对象中获取相关资源processDefinition.getDiagramResourceName());InputStream bpmnResourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(),// 从流程定义对象中获取相关资源processDefinition.getResourceName());
// 删除流程定义RepositoryService repositoryService = processEngine.getRepositoryService();repositoryService.deleteDeployment(deploy.getId(),true);
RuntimeService运⾏时服务: 开启流程实例
运⾏时服务主要⽤来开启流程实例,⼀个流程实例对应多个任务,也就是多个流程节点,⽐如请假审批是⼀个流程实例,部⻔主管,部⻔经理,总经理都是节点,我们开启服务是通过流程定义的key或者流程定义的id来开启的
当我们⽤仓储服务部署了流程图之后,就会产⽣⼀个流程部署id,⼀个流程部署id对应⼀个流程定义,⼀个流程定义对应多个流程实例,流程定义和流程实例之间的关系就好⽐是类和对象的关系。⼀个流程实例对应多个任务节点
// 通过部署Id获取流程定义,通过流程定义的key或者id开启一个流程实例// 流程定义需要通过部署ID来获得ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();RuntimeService runtimeService = processEngine.getRuntimeService();// 通过流程定义的key或者id开启一个流程实例// 当我们生成一个流程实例的时候,就相当于开启了一个请假的流程ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId());
// 将业务和流程实例关联processEngine.getRuntimeService().startProcessInstanceById(processDefinition.getId(),"BusinessID");
// 挂起流程实例RuntimeService runtimeService = processEngine.getRuntimeService();ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("instanceID").singleResult();// 当前流程实例是否被挂起:挂起-true、未挂起-falseboolean suspended = processInstance.isSuspended();if (!suspended){runtimeService.suspendProcessInstanceById(processInstance.getId());}
// 激活被挂起的流程实例RuntimeService runtimeService = processEngine.getRuntimeService();ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("instanceID").singleResult();// 当前流程实例是否被挂起:挂起-true、未挂起-falseboolean suspended = processInstance.isSuspended();if (suspended){runtimeService.activateProcessInstanceById(processInstance.getId());}
// 动态指定任务的执行人// 第一步:在创建任务的时候使用占位符指定Assignee执行人HashMap<String, Object> assigneesMap = new HashMap<>();assigneesMap.put("Assignee0","张三");assigneesMap.put("Assignee1","李四");RepositoryService repositoryService = processEngine.getRepositoryService();// 部署新的流程图Deployment deploy = repositoryService.createDeployment().addClasspathResource("").addClasspathResource("").deploy();// 生成新的流程实例ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()).singleResult();RuntimeService runtimeService = processEngine.getRuntimeService();ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), assigneesMap);
当我们生成一个请假流程实例的时候,就相当于开启了一个请假的流程。生成一个流程实例相当于开启了一个流程,一个流程实例就是一个流程。
TaskService任务服务: 任务查询、任务推进
任务服务是⽤来可以⽤来领取,完成,查询任务列表功能的。流程实例启动后,不同的用户可以查询到他在这个流程中的任务,前提是流程到达该用户。
// 流程开启后,可以根据用户名称查询当前用户在这个流程中的任务TaskService taskService = processEngine.getTaskService();List<Task> tasks = taskService.createTaskQuery()//通过流程定义ID获取该流程定义下所有的流程实例中的任务.processDefinitionId(processDefinition.getId())//通过用户名查询当前用户在对应的流程定义中的所有的任务.taskAssignee("userName").list();for (Task task : tasks) {System.out.println("任务名称:"+task.getName());System.out.println("任务ID:"+task.getId());System.out.println("流程实例ID:"+task.getProcessInstanceId());System.out.println("流程定义ID:"+task.getProcessDefinitionId());}
// 推进任务Task task = taskService.createTaskQuery()//通过流程实例ID获取当前流程实例中所有的任务.processInstanceId(processInstance.getId())//通过名称获取该流程实例中Assignee为”张三“的所有的任务//Assignee: 受让人; 代理人;受托人;分配到任务的人;执行人;.taskAssignee("张三").singleResult();// 通过taskService的complete方法完成taskID对应的任务taskService.complete(task.getId());
HistoryService历史服务
历史服务可以查看审批⼈曾经审批完成了哪些项⽬,审批项⽬总共花了多少时间,以及在哪个历史环节⽐较耗费时间等等,便于审批⼈查看历史环节信息
// 获取流程历史环节信息HistoryService historyService = processEngine.getHistoryService();// 返回当前流程定义ID对应的所有的流程实例历史环节信息(每一个流程实例的历史环节信息)List<HistoricActivityInstance> historicActivityInstances = historyService.createHistoricActivityInstanceQuery().processDefinitionId(processDefinition.getId()).orderByHistoricActivityInstanceStartTime().list();for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) {historicActivityInstance.getActivityId();historicActivityInstance.getTaskId();}
历史任务对象HistoricTaskInstance,它⾥⾯封装了任务开始时间,结束时间,该节点花费的时间等等信息
FormService表单服务
实现任务表单管理的,可选服务
IdentityService实体服务
操作⽤户信息,⽤户分组信息等,组信息包括如部⻔表和职位表
使用变量驱动流程走向
使用变量驱动流程走向:根据条件决定审批流程的走向
// 使用全局变量驱动流程走向ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-conf.xml");ProcessEngine processEngine = configuration.buildProcessEngine();// 通过流程处理引擎工具类获取默认的流程处理引擎,getDefaultProcessEngine方法内部是通过读取默认的xml配置文件:resources = classLoader.getResources("activiti.cfg.xml");// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();Deployment deploy = repositoryService.createDeployment().addClasspathResource("bpmn/procure.bpmn").addClasspathResource("bpmn/procure.png").name("离职审批流程").deploy();// 根据流程定义的key开启流程RuntimeService processRunTimeService = processEngine.getRuntimeService();HashMap<String, Object> processSignInfo = new HashMap<>();processSignInfo.put("Assignee0","张三");processSignInfo.put("Assignee1","李四");processSignInfo.put("Assignee1","王五");// 设置变量条件Employ employ = new Employ();employ.setWorkYears(3);processSignInfo.put("employ",employ);processRunTimeService.startProcessInstanceByKey("leave_process",processSignInfo);// 一步步完成任务TaskService processTaskService = processEngine.getTaskService();Task task = processTaskService.createTaskQuery().processDefinitionKey("leave_process").taskAssignee("name").singleResult();processTaskService.complete(task.getId());
// 为任务节点设置局部变量驱动流程走向ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti-conf.xml");ProcessEngine processEngine = configuration.buildProcessEngine();// 通过流程处理引擎工具类获取默认的流程处理引擎,getDefaultProcessEngine方法内部是通过读取默认的xml配置文件:resources = classLoader.getResources("activiti.cfg.xml");// ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();Deployment deploy = repositoryService.createDeployment().addClasspathResource("bpmn/procure.bpmn").addClasspathResource("bpmn/procure.png").name("离职审批流程").deploy();// 根据流程定义的key开启流程RuntimeService processRunTimeService = processEngine.getRuntimeService();HashMap<String, Object> processSignInfo = new HashMap<>();processSignInfo.put("Assignee0","张三");processSignInfo.put("Assignee1","李四");processSignInfo.put("Assignee1","王五");processRunTimeService.startProcessInstanceByKey("leave_process",processSignInfo);// 一步步完成任务TaskService processTaskService = processEngine.getTaskService();Task task = processTaskService.createTaskQuery().processDefinitionKey("leave_process").taskAssignee("name").singleResult();if ("人事主管审批".equals(task.getName())) {HashMap<String, Object> localVariables = new HashMap<>();Employ employ = new Employ();employ.setWorkYears(3);localVariables.put("employ",employ);processTaskService.setVariables(task.getId(),localVariables);// processTaskService.setVariable(task.getId(),"employ.workYear","3");}processTaskService.complete(task.getId());
任务分配方
Activiti以三种方式设置节点处理人,分别是:
Assignment:办理人,指定唯一一个。Candidate users:候选人,可以指定多个人。Candidate groups:候选组,可以指定多个组。
方式一:Assignment:办理人,指定唯一一个
// 启动流程的时候在通过map指定每一个节点的办理人
HashMap<String, Object> assigneesMap = new HashMap<>();
assigneesMap.put("Assignee0","张三");
assigneesMap.put("Assignee1","李四");
RuntimeService runtimeService = processEngine.getRuntimeService();
// 开启流程
ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), assigneesMap);
方式二:候选人,可以指定多个人。候选人中的用户都有权认领该任务并且完成该任务,当任务被领取之后,其他候选人即无法再看到此任务。
// 候选人拾取并办理任务
// 获取一个TaskServiceTaskService processTaskService = processEngine.getTaskService();// 通过候选人名称获取该候选人在流程实例中的任务Task task = processTaskService.createTaskQuery().processInstanceId(processInstance.getId()).taskCandidateUser("userName").singleResult();// 拾取任务,候选人一旦拾取任务就会变成当前任务的办理人,该任务就不能再被其他候选人拾取processTaskService.claim(task.getId(),"userName");processTaskService.complete(task.getId());
注意:调用claim方法领取之后别人不可以再领取不然会报错
// 办理人归还任务// 获取一个TaskServiceTaskService processTaskService = processEngine.getTaskService();// 通过办理人名称获取该办理人在流程实例中的任务Task task = processTaskService.createTaskQuery().processInstanceId(processInstance.getId()).taskAssignee("userName").singleResult();// 将办理人置空归还任务processTaskService.setAssignee(task.getId(),null);
// 候选人转交任务// 获取一个TaskServiceTaskService processTaskService = processEngine.getTaskService();// 通过办理人名称获取该办理人在流程实例中的任务Task task = processTaskService.createTaskQuery().processInstanceId(processInstance.getId()).taskAssignee("userName").singleResult();// 通过设置办理人将任务转交给其他候选人进行处理processTaskService.setAssignee(task.getId(),"targetUserName");
会签模式
会签是通过多实例Multi Instance来设置的:
-
Sequential:执行顺序,true表示多实例顺序执行,false表示多实例并行。
-
Loop Cardinality:循环基数,选填,会签人数。
-
Completion Condition:完成条件,Activiti预定义了3个变量,可以在UEL表达式中直接使用,可以根据表达式设置按数量、按比例、一票通过、一票否定等条件。
- nrOfInstances:总实例数,Collection中的数量。
- nrOfCompletedInstances:已经完成的实例数。
- nrOfActiveInstances:还没有完成的实例数。
// 一个人完成审批,整个任务就算通过 ${nrOfCompletedInstances==1}// 所有人完成审批,整个任务才算过 ${nrOfCompletedInstances==nrOfInstances}// 一半人以上完成审批整个任务才算通过 ${nrOfCompletedInstances/nrOfInstances > 0.5}
-
Collection:Assignee集合,可以在启动实例时赋值变量。
-
Element Variable:元素变量名,必须和Assignee占位符一样,表示Assignee的值是来自于集合中的元素变量
- 占位符的值:#{element},元素变量名:element
注意:元素变量名不要带#{}
-
Assignee:负责人占位符,会通过Collection自动赋值的。
会签参考1
网关
-
排他网关:ExclusiveGateway
- 排他⽹关⽤来对流程中的决定进⾏建模。流程执⾏到该⽹关时,按照输出流的顺序逐个计算,当条件计算结果为true时。继续执⾏当前⽹关的输出流。
- 在排他⽹关中,如果多个线路的计算结果都为true,那么只会执⾏第⼀个值为true的⽹关,忽略其他表达式的值为true的⽹关。如果多个⽹关计算结果没有为true的值,则引擎会抛出异常。
- 排他⽹关需要和条件顺序流配合使⽤,⼀个排他⽹关可以连接多个条件顺序流,每个条件顺序流设置⼀个条件在运⾏时由引擎计算并根据结果是否为true决定执⾏与否。
-
并行网关:ParallelGateway
- 并⾏⽹关⽤来对并发的任务进⾏流程建模,它能把单条线路任务拆分成多个路径并⾏执⾏获将多条线路合并。
- 拆分:并⾏执⾏所有的输出顺序流,并且为每⼀条顺序流创建⼀个并⾏执⾏线路。
- 合并:所有从并⾏⽹关拆分并执⾏完成的线路均在合并处等待,直到
所有的线路都执⾏完成才继续向下执⾏
。
-
包容网关:InclusiveGateway
- 包容⽹关融合了排他⽹关和并⾏⽹关的特性,包容⽹关既可以执⾏多条线路(并行网关特性),⼜允许在⽹关上设置条件(排他网关特性)。
- 事件网关:EventGateway
创建BPMN流程图
第一步:在项目的resource目录下创建bpmn文件夹
第二步:在bpmn文件夹下创建bpmn文件
第三步:从bpmn文件中得到xml文件——复制bpmn文件,粘贴为xml文件
第四步:将xml文件以bpmn的格式打开
第五步:将xml文件导出为png文件
BPMN流程图乱码怎么办?解决BPMN乱码
Spring整合Activiti
第一步:引⼊依赖
<dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.activiti.cloud</groupId><artifactId>activiti-cloud-services-api</artifactId><version>7.0.0.Beta1</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.6.11</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency>
第二步:编写spring-activiti.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--数据源--><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/activiti?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="qf123456" /></bean><!--配置Activiti使用的processEngine对象--><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!--注入数据源--><property name="dataSource" ref="dataSource"/><!--自动的生成Activiti数据库中的表--><property name="databaseSchemaUpdate" value="true"/></bean><!--流程引擎--><bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"><property name="processEngineConfiguration" ref="processEngineConfiguration"/></bean><!--RepositoryService--><bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /><!--RuntimeService--><bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" /><!--TaskService--><bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" /><!--HistoryService--><bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" /></beans>
第三步:使用
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring-activiti.xml"})
public class TestDemo {@Autowiredprivate RepositoryService repositoryService;@Testpublic void test1(){System.out.println(repositoryService);}}
SpringBoot整合Activiti
第一步:导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--activiti--><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>7.0.0.Beta1</version></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--druid连接--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency>
第二步:编写配置文件
# 应用名称
spring.application.name=spring-boot-activiti-demo
# 应用服务 WEB 访问端口
server.port=8080
# 配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/activiti?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=qf123456# 配置activiti
# true:activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建。
# false: 默认值,activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。
spring.activiti.database-schema-update=true# activiti7需要手动开启历史记录
spring.activiti.db-history-used=true# 配置历史记录级别
# none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
# activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
# audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
# full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
spring.activiti.history-level=full
参考地址