
简介Activiti 5.22完整包内含activiti-explorer.war是一套可直接部署的Activiti Explorer图形化管理应用面向需要搭建工作流引擎环境、学习BPMN 2.0流程设计或二次开发流程管理系统的Java开发者。压缩包共79个文件以48个jar依赖为主覆盖Activiti引擎、Spring集成、REST服务等核心模块另有10个xml流程定义与配置文件、properties配置、class文件以及png/jpg设计图、svg图标等整体大小88.33MBMETA-INF与WEB-INF目录结构完整便于直接部署至Tomcat等Servlet容器。包内自带的Explorer界面支持流程定义部署、流程实例启停与监控、任务审批以及用户与组权限管理并内置请假、设备维修、销售线索等示例BPMN流程可对照案例快速掌握Activiti 5.x的常见操作作为经典版本用于理解工作流引擎的核心原理仍非常合适。目前已有1188人学习/下载尤其适合希望边用边学Activiti的开发者。 如果你手头还维护着几个用 Activiti 5.x 写的老系统一定对activiti-explorer.war这个名字不陌生。这是 Activiti 官方在 5.22 时代随完整包一起分发的 Web 端流程设计器和管理控制台解压到 Tomcat 就能跑内置流程绘制、部署、发起、任务审批一整套体验。这几天帮一个老项目搭演示环境正好把 Activiti 5.22 完整包下载、activiti-explorer.war部署、切 MySQL、补任务监听器这些事完整走了一遍踩了不少坑也摸清了一些老版本才有的脾气。这篇就按实际操作的顺序把从下载到跑通的全过程写清楚给还在跟 5.22 打交道的朋友做个参考。1. 为什么还在用 5.22老项目的活儿新入门的课Activiti 5.22 是 5.x 系列里的收尾版本之后再往上升就是 Activiti 6、7 那一套完全不同的体系。很多公司早年的审批流、工单流、OA 系统底座就是 5.x。项目能跑就不动这是老系统的铁律所以哪怕新版本出了好几年生产环境里 Activiti 5.22 的存量依然不小。对刚接触工作流的人来说5.22 反而是一个特别好的入门选择。它的核心模型——流程定义、流程实例、任务、执行实例、历史——在 5.x 里表达得最直观网上的资料、老项目的代码、各种 demo 也几乎都基于这一代版本。更重要的是5.22 完整包里自带的activiti-explorer.war是一个开箱即用的 Web 应用它把流程引擎、流程设计器、用户管理、任务管理全部打包在一起不需要你自己写一行代码部署上去就能在浏览器里画流程图、部署流程、发起流程、处理任务。我这次做的事情简单说就是三件事把 5.22 完整包下载下来把activiti-explorer.war部署到 Tomcat 跑起来然后再把它默认的 H2 内存数据库换成 MySQL顺带解决设计器里任务监听器缺失的问题。整个过程大概一个小时能走完但中间有几个点不提前搞清楚能卡一下午。下面按实际操作的顺序来拆。2. 完整包下载与部署先让 Explorer 跑起来2.1 从哪找 5.22 完整包先说下载。Activiti 5.22 官方完整包的名字通常是activiti-5.22.0.zip里面包含了activiti-explorer.war、activiti-rest.war、依赖 jar、官方文档、数据库建表 SQL 脚本等。找的时候不要直接在搜索引擎里乱翻优先去两个地方Maven 中央仓库groupId 是org.activiti搜activiti-5.22.0能拿到完整包的 zip 以及所有模块的 jar 和 war。这是最靠谱的渠道文件完整、来源可信。官方文档归档Activiti 老版本文档站点里有 5.22 的下载入口指向的也是归档文件。如果你是想在新项目里用 Maven 管理依赖那不需要下载 zip直接引坐标就行dependency groupIdorg.activiti/groupId artifactIdactiviti-engine/artifactId version5.22.0/version /dependency dependency groupIdorg.activiti/groupId artifactIdactiviti-explorer/artifactId version5.22.0/version typewar/type /dependencyactiviti-engine是引擎核心activiti-explorer就是那个 Web 应用。基于 Maven 拿到的 war 和完整包里的activiti-explorer.war是同一个东西后面部署完全一致。2.2 部署几步走重点在环境匹配拿到activiti-explorer.war之后部署本身不难难的是环境匹配。我测试时用的组合是JDK 8 Tomcat 8.5这个组合跑 5.22 非常稳。如果你用 Tomcat 9 或更高版本可能会遇到 Servlet API 版本不兼容的问题不建议在这上面花时间直接退回 Tomcat 8.5 最省事。部署步骤就三步把activiti-explorer.war复制到 Tomcat 的webapps目录。启动 Tomcatbin/startup.sh或双击startup.bat第一次启动会自动解压 war 包。浏览器访问http://localhost:8080/activiti-explorer。默认账号是kermit / kermit这个账号是内置的超级管理员登录后能看到整个 Explorer 的操作界面。左边是流程管理菜单中间是设计器画布右边是属性面板。这里有一个容易被忽略的点Tomcat 启动后如果日志里出现java.lang.OutOfMemoryError或者部署超时多半是内存参数问题。建议在bin/catalina.sh或.bat里把启动内存调大一点JAVA_OPTS-Xms512m -Xmx1024m -XX:MaxPermSize256m注意MaxPermSize在 JDK 8 里已经废弃带上也不报错但没必要用 JDK 7 时它还有意义。总之内存给足Explorer 用起来才不卡。3. 默认 H2 与切换 MySQL数据库版本那些事3.1 为什么能“开箱即用”activiti-explorer.war默认自带一个 H2 内存数据库这是它能免配置直接跑起来的原因。H2 作为 embedded 数据库数据写在内存里所以 Tomcat 一重启所有的流程定义、用户数据、历史记录全部清空。对写 Demo、测功能来说很方便但稍微正式一点的场景就不行了——你辛辛苦苦画的流程、建的代理人、跑了一部分的任务一次重启全没这谁都受不了。所以实际项目里拿到 war 包后的第一件事基本都是切数据库。Activiti 5.22 官方支持的数据库有 MySQL、Oracle、PostgreSQL、H2 等国内用的最多的就是 MySQL。3.2 切换 MySQL 的完整操作切 MySQL 的操作核心是改两处连接配置和驱动。具体步骤我走的这一套比较稳妥第一步在 MySQL 里先建库。官方推荐使用 utf8 字符集避免以后流程参数里有中文出现乱码CREATE DATABASE activiti DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;第二步把 MySQL 驱动 jar 复制到webapps/activiti-explorer/WEB-INF/lib目录下。注意 5.22 时代的驱动很老如果你连的是 MySQL 5.7用mysql-connector-java-5.1.49.jar足够如果连的是 MySQL 8.x请务必用 8.x 的驱动比如mysql-connector-java-8.0.33.jar否则启动直接报错。第三步修改数据库连接配置。配置文件在webapps/activiti-explorer/WEB-INF/classes/db.properties打开后改成你自己数据库的信息jdbc.drivercom.mysql.cj.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/activiti?useUnicodetruecharacterEncodingutf8useSSLfalseallowPublicKeyRetrievaltruenullCatalogMeansCurrenttrue jdbc.usernameroot jdbc.passwordyourpassword这里有几个参数我要重点解释一下。MySQL 8 的驱动类名是com.mysql.cj.jdbc.Driver不是老的com.mysql.jdbc.Driver写错就报ClassNotFoundException。useSSLfalse是避免本地开发环境没有 SSL 证书时报SSL connection error。allowPublicKeyRetrievaltrue是 MySQL 8 驱动在非 SSL 连接下必须加的不加会报Public Key Retrieval is not allowed。最后一个nullCatalogMeansCurrenttrue是 Activiti 5.22 连新版 MySQL 时容易出现表重复创建问题的关键参数这个坑比较冷门但很实用。第四步处理建表。把数据库切到正式库之后还有最后一关——表结构从哪来。最简单的方式是第一次启动时让引擎自动建表前提是要把引擎配置里的databaseSchemaUpdate设为true。如果你不太想改引擎配置也可以手动执行官方 SQL 脚本完整包的database/create目录下有activiti.mysql.create-engine.sql、activiti.mysql.create-identity.sql等一整套脚本按顺序执行就行。我一般选自动建表省心生产环境才用手动脚本求可控。第五步重启 Tomcat再次访问 Explorer。登录进去随便建个流程试试如果没问题说明数据库已经切换成功。3.3 数据库版本字段与常见报错Activiti 引擎启动时会检查数据库里的版本号这个版本号存在ACT_GE_PROPERTY表里NAME字段是schema.versionVALUE_字段是版本值。5.22.0 引擎对应的一一般是5.22.0.0这样的格式。如果你把高版本引擎连到低版本库上启动日志就会报Activiti database schema version 5.21.0.0 is older than engine version 5.22.0.0反过来高版本库连低版本引擎会报“newer than engine version”。这类版本不一致的问题处理方式就是统一版本要么升级库要么降级引擎不要硬凑。另外网上搜“activiti 数据库版本”时经常看到有人问ACT_GE_PROPERTY里其他字段的意义其实这个表在引擎里只存两类东西schema 版本和下一次执行 ID 最大值平时不需要动它。4. 流程设计器没有任务监听器老设计器的短板与补法4.1 设计器的真实体验activiti-explorer.war自带的流程设计器在 5.22 这一代里是主流操作界面。它基于 Web 方式绘制 BPMN 2.0 流程图你可以从左边拖拽 start event、user task、exclusive gateway、end event 这些节点右边属性面板里填写节点名称、负责人候选人表达式。画完之后点保存流程定义就自动部署到引擎里不需要额外的部署动作。但用过的朋友都知道这个设计器有个明显的坑节点属性面板里没有任务监听器Task Listener的配置入口。网上搜“activity 5.22 流程设计器没有任务监听器”能搜出一堆提问基本都是在设计器里选中 User Task 节点翻遍属性面板也找不到监听器设置项。这其实是 5.22 设计器的功能裁剪不是你不会用。任务监听器在工作流里非常常用比如在任务创建时自动给处理人发通知、任务完成后自动回写业务表都靠它。没有可视化入口不代表做不到方法有两个。4.2 补法一手改流程 XML 加监听器设计器虽然不能可视化加监听器但它支持查看和导出 XML。你可以先用设计器画好流程图然后切到 XML 视图手动把监听器配置写进去。一个包含任务监听器的 User Task 节点 XML 长这样userTask idusertask1 name部门审批 activiti:assignee${approver} extensionElements activiti:taskListener eventcreate classcom.example.MyTaskCreateListener / activiti:taskListener eventcomplete expression${myBean.doComplete(execution)} / /extensionElements /userTaskevent有三个常用取值create表示任务创建时触发assignee表示处理人变更时触发complete表示任务完成时触发。监听器可以配class指定 Java 类也可以配expression调 Spring 容器里的 bean。注意一定要在流程定义的根节点definitions上声明activiti命名空间否则解析器不认这个标签definitions xmlnshttp://www.omg.org/spec/BPMN/20100524/MODEL xmlns:activitihttp://activiti.org/bpmn手改 XML 的方式看着原始但胜在可控。改完保存Explorer 会重新部署流程定义新版本的流程定义会生效。要注意的是流程引擎部署时会校验 XML 合法性如果监听器类不存在或者类名写错部署会失败日志里会看得清清楚楚。4.3 补法二IDEA 插件离线安装建模更顺手如果你不想被 Explorer 设计器绑住手脚更推荐用 IDEA 里的 Activiti BPMN 插件来画流程图。这个插件支持可视化配置 task listener在界面右侧面板里就可以直接添加 create、complete 等事件还能选择 class 或 expression导出的 bpmn 文件和引擎完全兼容。但有个现实问题IDEA 插件市场经常搜不到老版本的 Activiti 插件或者下载速度很慢。这时候就要走离线安装。离线安装的步骤是先从插件仓库下载插件 zip 包然后打开 IDEA进入File - Settings - Plugins点击右上角的齿轮图标选Install Plugin from Disk...选中下载好的 zip重启 IDEA 即可。装完后在resources目录右键New - BPMN File就能创建一个可视化的流程文件。有一点要提醒插件版本和 IDEA 版本要匹配。你用 2023 或 2024 版的 IDEA 装老版插件大概率装不上或装完按钮不显示。我自己的做法是先看插件页面标注的兼容版本范围再对一下自己的 IDEA 版本宁可低一个版本也不要高。离线包装好后画流程的效率比 Explorer 里拖拽高很多尤其是配监听器、写表达式这些操作体验差距非常明显。5. 典型报错速查与避坑心得整个流程走下来我把容易踩的坑汇总成一张表方便后面遇到问题快速定位。这些都是我实际碰到过、并且验证过解决方式的问题。报错现象根本原因解决方式ClassNotFoundException: com.mysql.jdbc.Driver驱动类名不对或驱动 jar 没放进 WEB-INF/lib换成com.mysql.cj.jdbc.Driver确认 MySQL 驱动版本Public Key Retrieval is not allowedMySQL 8 驱动要求显式允许公钥获取JDBC 连接串加allowPublicKeyRetrievaltrueActiviti database schema version ... is older/newer than engine version库版本和引擎版本不一致统一引擎与库的版本核对 ACT_GE_PROPERTY启动时自动建表报“表已存在”或重复创建MySQL 5.x/8.x 对 null catalog 处理不同JDBC 连接串加nullCatalogMeansCurrenttrue设计器里找不到任务监听器配置项5.22 设计器不支持可视化配置手动在 XML 加activiti:taskListener或改 IDEA 插件建模Tomcat 启动非常慢或内存溢出启动内存配置不足调大JAVA_OPTS建议 Xmx1024m登录后中文流程名乱码数据库字符集不是 utf8MySQL 建库用 utf8连接串带characterEncodingutf8再说几个个人体会比较深的小细节。第一activiti-explorer.war里的 H2 默认配置导致很多人以为工作流是开箱即用的结果切库之后才发现表结构要单独处理。建议下载完整包后直接去database/create目录下看看官方 SQL 脚本这些脚本是理解 Activiti 表结构最好的入口比只看文档直观得多。第二任务监听器这种配置在新版设计器里可能就是一个按钮的事但在 5.22 里就是没有。不要跟老版本死磕要么用 XML 补要么换 IDEA 插件建模两条路我都试过最终团队统一用的是 IDEA 插件。原因很简单XML 手写监听器时一个字母写错排查半天可视化面板至少能保证语法正确。第三如果是在老项目上做功能扩展尽量保持activiti-engine的版本和数据库表版本一致。很多“莫名其妙”的异常追根溯源都是启动时引擎把版本校验当成错误抛了。你用 5.22 的包就一定用 5.22 的库不要拿新库连旧引擎。我自己的经验是把 Activiti 5.22 这套老环境搭建一次才真正理解了它的引擎初始化流程、建表策略和版本管理方式。现在遇到问题已经不会一上来就怀疑框架有 bug而是能顺着日志、配置文件、库表版本一步步排查。如果你也卡在下载、部署或者设计器功能不全的某个环节希望这份记录能帮你少走点弯路。本文还有配套的精品资源点击获取