河北君卓展览装饰有限公司,南山网站seo,wordpress图片自动居中,50强网站建设公司Activiti工作流介绍
Activiti是一个开源的工作流和业务流程管理系统。它是由Joram Barrez和Tijs Rademakers在2009年创建的#xff0c;这两个人都是JBoss jBPM项目的核心开发人员。他们离开JBoss之后#xff0c;开始自己的项目#xff0c;并基于他们的经验创造了Activiti。…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-build123.001/修改为idea-version since-build201.7223.91 until-build201.7223.91/ # 201.7223.91为自己IDEA的版本
2. 将dependscom.intellij.modules.xml/depends修改为dependscom.intellij.modules.java/depends
3. 将version3.E-8/version修改为version201.7223.91/version# 201.7223.91为自己IDEA的版本第五步、将所有的解压并修改好的文件进行压缩压缩完成后重命名为actiBPM.jar
第六步、打开IDEA的File-Settings-Plugins安装插件
Activiti快速开始
第一步、创建Activiti所需要的数据库无需创建表项目启动后会自动在指定的数据源中创建表在BPMN中主要有以下几种表 1. 流程定义表存放流程的基本信息包括流程名称、流程编号、版本号、流程描述等2. 流程节点表存放流程中的各个节点包括开始节点、结束节点、活动节点、网关等以及它们之间的连接关系3. 流程实例表存放流程实例的基本信息包括流程实例ID、流程定义ID、流程启动时间、当前节点信息等4. 任务表存放流程中的各个任务信息包括任务ID、任务名称、任务描述、任务处理人、任务开始时间、任务结束时间等5. 历史表存放流程的历史记录信息包括流程实例的历史状态、任务的历史处理记录、变量的历史记录等。第二步、所需依赖
dependencygroupIdorg.activiti/groupIdartifactIdactiviti-engine/artifactIdversion7.0.0.Beta1/version
/dependency
dependencygroupIdorg.activiti/groupIdartifactIdactiviti-spring/artifactIdversion7.0.0.Beta1/version
/dependency
dependencygroupIdorg.activiti/groupIdartifactIdactiviti-bpmn-model/artifactIdversion7.0.0.Beta1/version
/dependency
dependencygroupIdorg.activiti/groupIdartifactIdactiviti-bpmn-converter/artifactIdversion7.0.0.Beta1/version
/dependency
dependencygroupIdorg.activiti/groupIdartifactIdactiviti-json-converter/artifactIdversion7.0.0.Beta1/version
/dependency
!-- dependency
groupIdorg.activiti/groupId
artifactIdactiviti-bpmn-layout/artifactId
version7.0.0.Beta1/version
/dependency--
dependencygroupIdorg.activiti.cloud/groupIdartifactIdactiviti-cloud-services-api/artifactIdversion7.0.0.Beta1/version
/dependency
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.23/version
/dependency第三步创建Activiti所需要的配置文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!-- 数据源 --bean idactivitiDatasource classorg.apache.commons.dbcp.BasicDataSourceproperty namedriverClassName valuecom.mysql.jdbc.Driver/property nameurl valuejdbc:mysql://192.168.11.136/activiti?useUnicodetrueamp;characterEncodingutf8amp;serverTimezoneHongkongamp;useSSLfalse/property nameusername valueroot/property namepassword value123456//bean!-- 配置Activiti使用的processEngine对象 --bean idprocessEngineConfiguration classorg.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration!-- 注入数据源 --property namedataSource refactivitiDatasource/!-- 自动的生成Activiti数据库中的表 --property namedatabaseSchemaUpdate valuetrue//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执行人HashMapString, 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();ListTask tasks taskService.createTaskQuery()//通过流程定义ID获取该流程定义下所有的流程实例中的任务.processDefinitionId(processDefinition.getId())//通过用户名查询当前用户在对应的流程定义中的所有的任务.taskAssignee(userName).list();for (Task task : tasks) {System.out.println(任务名称task.getName());System.out.println(任务IDtask.getId());System.out.println(流程实例IDtask.getProcessInstanceId());System.out.println(流程定义IDtask.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对应的所有的流程实例历史环节信息每一个流程实例的历史环节信息ListHistoricActivityInstance 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();HashMapString, 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();HashMapString, 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())) {HashMapString, 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指定每一个节点的办理人
HashMapString, 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还没有完成的实例数。// 一个人完成审批整个任务就算通过
${nrOfCompletedInstances1}// 所有人完成审批整个任务才算过
${nrOfCompletedInstancesnrOfInstances}// 一半人以上完成审批整个任务才算通过
${nrOfCompletedInstances/nrOfInstances 0.5}CollectionAssignee集合可以在启动实例时赋值变量。 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
第一步引⼊依赖 dependencygroupIdorg.activiti/groupIdartifactIdactiviti-engine/artifactIdversion7.0.0.Beta1/version/dependencydependencygroupIdorg.activiti/groupIdartifactIdactiviti-spring/artifactIdversion7.0.0.Beta1/version/dependencydependencygroupIdorg.activiti/groupIdartifactIdactiviti-bpmn-model/artifactIdversion7.0.0.Beta1/version/dependencydependencygroupIdorg.activiti/groupIdartifactIdactiviti-bpmn-converter/artifactIdversion7.0.0.Beta1/version/dependencydependencygroupIdorg.activiti/groupIdartifactIdactiviti-json-converter/artifactIdversion7.0.0.Beta1/version/dependencydependencygroupIdorg.activiti/groupIdartifactIdactiviti-bpmn-layout/artifactIdversion7.0.0.Beta1/version/dependencydependencygroupIdorg.activiti.cloud/groupIdartifactIdactiviti-cloud-services-api/artifactIdversion7.0.0.Beta1/version/dependencydependencygroupIdorg.aspectj/groupIdartifactIdaspectjweaver/artifactIdversion1.6.11/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion8.0.23/version/dependencydependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.4.5/version/dependencydependencygroupIdcommons-dbcp/groupIdartifactIdcommons-dbcp/artifactIdversion1.4/version/dependency第二步编写spring-activiti.xml文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--数据源--bean iddataSource classorg.apache.commons.dbcp.BasicDataSourceproperty namedriverClassName valuecom.mysql.cj.jdbc.Driver/property nameurl valuejdbc:mysql://localhost:3306/activiti?serverTimezoneUTC/property nameusername valueroot/property namepassword valueqf123456 //bean!--配置Activiti使用的processEngine对象--bean idprocessEngineConfiguration classorg.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration!--注入数据源--property namedataSource refdataSource/!--自动的生成Activiti数据库中的表--property namedatabaseSchemaUpdate valuetrue//bean!--流程引擎--bean idprocessEngine classorg.activiti.spring.ProcessEngineFactoryBeanproperty nameprocessEngineConfiguration refprocessEngineConfiguration//bean!--RepositoryService--bean idrepositoryService factory-beanprocessEngine factory-methodgetRepositoryService /!--RuntimeService--bean idruntimeService factory-beanprocessEngine factory-methodgetRuntimeService /!--TaskService--bean idtaskService factory-beanprocessEngine factory-methodgetTaskService /!--HistoryService--bean idhistoryService factory-beanprocessEngine factory-methodgetHistoryService //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
第一步导入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scopeexclusionsexclusiongroupIdorg.junit.vintage/groupIdartifactIdjunit-vintage-engine/artifactId/exclusion/exclusions/dependency!--activiti--dependencygroupIdorg.activiti/groupIdartifactIdactiviti-spring-boot-starter/artifactIdversion7.0.0.Beta1/version/dependency!--mysql驱动--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependency!--druid连接--dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.1.10/version/dependency第二步编写配置文件
# 应用名称
spring.application.namespring-boot-activiti-demo
# 应用服务 WEB 访问端口
server.port8080
# 配置数据源
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver
spring.datasource.urljdbc:mysql://localhost:3306/activiti?serverTimezoneUTC
spring.datasource.usernameroot
spring.datasource.passwordqf123456# 配置activiti
# trueactiviti会对数据库中所有表进行更新操作。如果表不存在则自动创建。
# false 默认值activiti在启动时会对比数据库表中保存的版本如果没有表或者版本不匹配将抛出异常。
spring.activiti.database-schema-updatetrue# activiti7需要手动开启历史记录
spring.activiti.db-history-usedtrue# 配置历史记录级别
# none不保存任何的历史数据因此在流程执行过程中这是最高效的。
# activity级别高于none保存流程实例与流程行为其他数据不保存。
# audit除activity级别会保存的数据外还会保存全部的流程任务及其属性。audit为history的默认值。
# full保存历史数据的最高级别除了会保存audit级别的数据外还会保存其他全部流程相关的细节数据包括一些流程参数等。
spring.activiti.history-levelfull参考地址