Activiti是领先的轻量级的,以Java为中心的开源BPMN(Business Process Modeling Notation)引擎,实现了真正的流程自动化。下面介绍如何在SpringBoot环境下使用Maven集成Activiti6,来实现流程开发。

添加依赖


  1. <dependency>
  2. <groupId>org.activiti</groupId>
  3. <artifactId>activiti-spring-boot-starter-basic</artifactId>
  4. <version>6.0.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-web</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.boot</groupId>
  12. <artifactId>spring-boot-starter-jdbc</artifactId>
  13. </dependency>

添加Processes目录

SpringBoot集成activiti默认会从classpath下的processes目录下读取流程定义文件,所以需要在src/main/resources目录下添加processes目录,并在目录中创建流程文件,添加目录后,目录结构变为:

如果没有processes目录,则需要修改配置spring.activiti.process-definition-location-prefix,指定流程文件存放目录。

Spring集成Activiti6默认支持**.bpmn20.xml和**.bpmn格式的流程定义文件,修改支持的文件格式,通过配置spring.activiti.process-definition-location-suffixes修改

如:


  1. spring:
  2. activiti:
  3. check-process-definitions: true #自动检查、部署流程定义文件
  4. database-schema-update: true #自动更新数据库结构
  5. process-definition-location-prefix: classpath:/processes/ #流程定义文件存放目录
  6. #process-definition-location-suffixes: #流程文件格式
  7. # - **.bpmn20.xml
  8. # - **.bpmn

启动项目时,如果没有流程部署,就不能通过自动注入,使用RuntimeService等API,依赖注入时后报错。

ActivitiProperties中定义了activiti的自动配置项,其他配置请查看ActivitiProperties属性。

添加数据源

添加数据源,项目中添加数据源,初始化数据库结构,后续保存流程数据,


  1. spring :
  2. #data source config
  3. datasource :
  4. driver : com.mysql.jdbc.Driver
  5. url: jdbc:mysql://192.168.105.10:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
  6. username : root
  7. password : mysql
  8. initsize : 10
  9. maxActive : 20
  10. minIdle : 10
  11. maxWait : 120000
  12. poolPreparedStatements : false
  13. maxOpenPreparedStatements : -1
  14. validationQuery : select 1
  15. testOnborrow : true
  16. testOnReturn : true
  17. testWhileIdle : true
  18. timeBetweenEvictionRunsMillis : 120000
  19. filters : log4j,stat

添加流程

在项目中添加流程,创建文件simple.bpmn,添加内容


  1. <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2. <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:tns="Examples" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" expressionLanguage="http://www.w3.org/1999/XPath" id="m1539757531057" name="" targetNamespace="Examples" typeLanguage="http://www.w3.org/2001/XMLSchema">
  3. <process id="oneTaskProcess" isClosed="false" name="The One Task Process" processType="None">
  4. <startEvent id="theStart"/>
  5. <sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask"/>
  6. <userTask activiti:assignee="${user}" activiti:exclusive="true" id="theTask" name="my task"/>
  7. <sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd"/>
  8. <endEvent id="theEnd"/>
  9. </process>
  10. </definitions>

启动测试

编写SpringBoot启动类,启动项目,启动项目。


  1. @SpringBootApplication(scanBasePackages = "com.legao.server")
  2. @EnableSwagger2
  3. public class WorkflowServer {
  4. public static void main(String[] args) {
  5. SpringApplication.run(WorkflowServer.class, args);
  6. }
  7. }

启动时,发现启动报错,


  1. Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
  2. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerMapping' defined in class path resource [org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy

查看activiti-spring-boot-starter-basic-6.0.0.jar发现,org.activiti.spring.boot.SecurityAutoConfiguration编译报错,这时候将SecurityAutoConfiguration排除到SpringBoot启动之外,即@SpringBootApplication注解添加exclude = SecurityAutoConfiguration.class属性


  1. @SpringBootApplication(scanBasePackages = "com.legao.server", exclude = SecurityAutoConfiguration.class)
  2. @EnableSwagger2
  3. public class WorkflowServer {
  4. public static void main(String[] args) {
  5. SpringApplication.run(WorkflowServer.class, args);
  6. }
  7. }

再启动发现启动正常,这时候SpringBoot集成activiti已经启动成功,查看数据库,Activiti6运行所需的28张表也已经创建成功。


  1. ACT_EVT_LOG
  2. ACT_GE_BYTEARRAY
  3. ACT_GE_PROPERTY
  4. ACT_HI_ACTINST
  5. ACT_HI_ATTACHMENT
  6. ACT_HI_COMMENT
  7. ACT_HI_DETAIL
  8. ACT_HI_IDENTITYLINK
  9. ACT_HI_PROCINST
  10. ACT_HI_TASKINST
  11. ACT_HI_VARINST
  12. ACT_ID_GROUP
  13. ACT_ID_INFO
  14. ACT_ID_MEMBERSHIP
  15. ACT_ID_USER
  16. ACT_PROCDEF_INFO
  17. ACT_RE_DEPLOYMENT
  18. ACT_RE_MODEL
  19. ACT_RE_PROCDEF
  20. ACT_RU_DEADLETTER_JOB
  21. ACT_RU_EVENT_SUBSCR
  22. ACT_RU_EXECUTION
  23. ACT_RU_IDENTITYLINK
  24. ACT_RU_JOB
  25. ACT_RU_SUSPENDED_JOB
  26. ACT_RU_TASK
  27. ACT_RU_TIMER_JOB
  28. ACT_RU_VARIABLE

(完)

原文地址:https://blog.csdn.net/weihao_/article/details/83241662

SpringBoot2集成Activiti6的更多相关文章

  1. SpringBoot2整合activiti6环境搭建

    SpringBoot2整合activiti6环境搭建 依赖 <dependencies> <dependency> <groupId>org.springframe ...

  2. Activiti(二) springBoot2集成activiti,集成activiti在线设计器

    摘要 本篇随笔主要记录springBoot2集成activiti流程引擎,并且嵌入activiti的在线设计器,可以通过浏览器直接编辑出我们需要的流程,不需要通过eclipse或者IDEA的actiB ...

  3. springboot集成activiti6.0多数据源的配置

    最近公司开始开发springboot的项目,需要对工作流进行集成.目前activiti已经发布了7.0的版本,但是考虑到6.0版本还是比较新而且稳定的,决定还是选择activiti6.0的版本进行集成 ...

  4. springboot2集成pagehelper

    springboot2集成pagehelper超级简单,本示例直接抄袭官方示例,仅将数据库由H2改成MySQL而已. 1. pom.xml <?xml version="1.0&quo ...

  5. UidGenerator springboot2集成篇

    uid-generator 官网集成文档: https://github.com/baidu/uid-generator/blob/master/README.zh_cn.md 由于并没有提供spri ...

  6. SpringBoot2 集成三种连接池 c3p0 hikari druid

    Hikari 1.首先集成 hikari springboot默认集成,只需要简单的配置即可 1.1 首先导入包 <dependency> <groupId>com.zaxxe ...

  7. SpringBoot2 集成日志,复杂业务下的自定义实现

    本文源码:GitHub·点这里 || GitEE·点这里 一.日志体系集成 1.日志管理 在系统的开发中,最关键的一个组件工具就是日志,日志打印方便问题排查,或者生产事故回溯,日志记录用来监控并分析系 ...

  8. SSM集成activiti6.0错误集锦(一)

    项目环境 Maven构建 数据库:Orcle12c 服务器:Tomcat9 <java.version>1.8</java.version> <activiti.vers ...

  9. springboot2集成activiti出错

    报一个反射错误 java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy 解决方案:http ...

随机推荐

  1. P5562 [Celeste-B]Center of the Earth 题解

    构造 因为题目只要求两位相同,所以可以暴力枚举这两位所有的可能性,方案数为\(O(n^2)\). 但是,这么做是显然不优的,因为完全没有用到第三位. 观察题目条件:n为偶数. 就想一想能不能奇数偶数分 ...

  2. 验证python中函数传参是引用传递

    定义: 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数. 引用传递(pass by reference)是指在 ...

  3. LUOGU 2593 : [Zjoi2006] 超级麻将

    传送门 解题思路 直接爆搜全T..状态数太多了,所以我们考虑贪心+剪枝.贪心:先拿三个连着的,再拿四个一样的,再拿三个一样的,最后拿两个一样的这样的搜索顺序最优,两个的放最后是因为只要这样的一个,三个 ...

  4. sql server 创建视图添加表时出现从其他数据库导入的表未显示出来

    创建视图添加表时出现从其他数据库导入的表未显示出来,通过数据库刷新,也不能解决.关闭SQL server management studio 后,再次进入,在创建视图的时候添加表的列表就出现了新导入的 ...

  5. JavaScript异步

    JavaScript异步类型 延迟类型:setTimeout.setInterval.setImmediate 监听事件:监听new Image加载状态.监听script加载状态.监听iframe加载 ...

  6. 基于mcp940反编译Minecraft源代码

    引言 Minecraft中文叫"我的世界",没怎么深入玩过,来试试把它源代码反编译出来吧. 参考教程: https://minecraft.gamepedia.com/Mods/C ...

  7. Codeforces 436C

    题目链接 C. Dungeons and Candies time limit per test 2 seconds memory limit per test 256 megabytes input ...

  8. 微信小程序错误——mpvue小程序:未找到 app.json 中的定义的 pages "pages/XXX/XXX" 对应的 WXML 文件

    背景 在刚开始学习开发小程序时,使用微信开发工具在app.json建立页面,写好配置文件名称后,应该会自动生成页面的4个文件,结果没有生成文件,反而报错:mpvue小程序:未找到 app.json 中 ...

  9. html5之div,article,section区别与应用

    div 块级元素,在里面的内容会自动开始新行,可以定义文档中的分区或节,把文档分割成独立,不同的部分 本身没有什么语义,更适合帮助布局,进行样式化. <div> </div> ...

  10. MaxCompute 图计算用户手册(下)

    示例程序 强连通分量 在有向图中,如果从任意一个顶点出发,都能通过图中的边到达图中的每一个顶点,则称之为强连通图.一张有向图的顶点数极大的强连通子图称为强连通分量.此算法示例基于 parallel C ...