多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Flowable事件日志教程:让流程每一步都有迹可循

Flowable事件日志教程:让流程每一步都有迹可循 Flowable事件日志教程让流程每一步都有迹可循【免费下载链接】flowable-engineA compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engine财务复核时有人要求你证明“这笔报销单当时是几点改派给谁的”。如果你用了 Flowable 事件日志就不必从散落各处的业务表里反推流程启动、任务分配、变量修改都会以一条条记录写进数据库按实例 ID 就能把完整链路取回来。原理一句话事件日志是挂在引擎上的一个监听器订阅任务、节点、变量变更等事件把每条事件序列化成 JSON 记录在命令提交时批量写入形成可查询、可回放的操作轨迹。开启 Flowable 事件日志一份可复制的最小配置ProcessEngineConfiguration cfg ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration(); ProcessEngine engine cfg.buildProcessEngine(); // 挂上事件日志监听器此后运行时事件即写入数据库 EventLogger eventLogger new EventLogger(cfg.getClock(), cfg.getObjectMapper()); engine.getRuntimeService().addEventListener(eventLogger); engine.getRuntimeService().startProcessInstanceByKey(expenseApproval); // 像平时一样跑流程 // 查询事件日志startLogNr 为起始日志号pageSize 为分页大小 ListEventLogEntry entries engine.getManagementService().getEventLogEntries(null, null);这段代码解决了“开启事件日志”的全部问题监听器挂上之后引擎的运行时事件自动变成数据库里的结构化记录之后随时可以按实例把操作轨迹读出来。任务与变量审计查谁动了什么引擎自带一套内置事件处理器见 EventLogger 源码覆盖任务生命周期、节点流转、序列流和变量变更四大类。每条记录都带有 taskId、userId、processInstanceId 等字段JSON 数据里存具体细节。type 取值出现时机data 里的关键信息TASK_CREATED / TASK_ASSIGNED / TASK_COMPLETED任务创建、分配、完成taskId、处理人 userIdACTIVITY_STARTED / ACTIVITY_COMPLETED节点进入与离开activityId、executionId、节点类型VARIABLE_CREATED / UPDATED / DELETED变量增删改变量名与取值要回答“谁改了哪个变量”按 type 值过滤即可取出 type 为 VARIABLE_UPDATED 的记录userId 字段就是操作人data 反序列化后能看到变量名和取值。 流程路径回放还原一个实例走过的路流程实例开始与结束分别记为 PROCESSINSTANCE_START / PROCESSINSTANCE_END开始记录里还带初始变量节点进出记为 ACTIVITY_STARTED / ACTIVITY_COMPLETED每条序列流经过记为 SEQUENCEFLOW_TAKEN。按时间戳排好序就是这个实例的完整走位。记录就落在引擎数据库里和其他数据表放在一起直接用数据库工具也能看。按实例查询更省事传实例 ID 即可ListEventLogEntry path managementService .getEventLogEntriesByProcessInstanceId(processInstanceId);扩展事件日志追加事件类型与写入回调默认类型不够用时addEventHandler 可以注册更多 FlowableEngineEventType处理器继承引擎里的 EventLoggerEventHandler 实现。如果希望数据落库后立刻有动作实时告警、转发外部系统用 addEventLoggerListener 注册回调它在批量写入完成后触发eventLogger.addEventHandler(FlowableEngineEventType.FLOWABLE_CUSTOM, MyCustomEventHandler.class); // 自研处理器 eventLogger.addEventLoggerListener(logger - notifyAuditSystem());常见坑事件日志没写进数据怎么办查不到任何记录。多半是监听器没挂上或挂错位置任务类事件来自运行时服务用runtimeService.addEventListener注册再用 getEventLogEntries 回读验证一遍。操作进行中查不到最新数据。事件是在命令提交时统一批量写入的不是一条事件一次落库这是为性能做的取舍等一次操作完成后再查即可。data 字段看不懂。它是 JSON 字节数组而非明文需要用 ObjectMapper 反序列化完整解析写法参考仓库里的 DatabaseEventLoggerTest。流程正常但日志缺失。事件日志默认不 fail on exception写日志失败只打警告、不打断流程怀疑丢数据时先翻引擎日志里的 warn。选型建议事件日志、历史数据与自研监控目标是合规审计、操作回放内置 EventLogger 加数据库持久化就够不用自己写采集。目标是实时告警或转发用 EventLoggerListener 回调不要轮询表。数据量大、要独立保留期按 ManagementService 接口的 getEventLogEntries(startLogNr, pageSize) 按日志号定期归档或清理。只需要“谁完成了哪个节点”历史功能如 HistoricActivityInstance往往已够用事件日志的长处是更细的变量级、序列流级操作流。下一步对照仓库中的 DatabaseEventLoggerTest在自己的一个流程上开启事件日志试着回放单个实例的完整路径。【免费下载链接】flowable-engineA compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表