深入Flowable流程引擎:核心原理與高階實戰(簽名版)
賀波、劉曉鵬、胡海琴
相關主題
商品描述
本書旨在為讀者提供關於Flowable的全面指南,深入探討基於業務流程開發的思想和方法。全書分為4篇:基礎準備篇介紹Flowable的基礎用法、流程設計器集成與使用、工作流引擎配置、數據庫設計、核心概念和API等,讓讀者建立對Flowable的基本認識;常規應用篇介紹Flowable各種功能和特性的配置與使用,讓讀者掌握Flowable的基礎用法;高級實戰篇立足實戰,介紹如何基於Flowable的擴展特性實現對多種復雜流程場景的支持;架構擴展篇主要介紹提高Flowable性能和增大其容量的措施,並提出一套多引擎架構方案來支撐大容量、高並發和高穩定流程場景。
作者簡介
贺波
国内资深的工作流及BPM领域专家,专注于流程领域十余年,长期致力于BPM技术及相关产品的研发、应用和推广,擅长为国内外大中型企业提供以流程为导向的数字化解决方案。作为第一发明人持有多项BPM领域发明专利。
刘晓鹏
拥有10年互联网系统研发、架构设计经验,在高并发、高性能、高可用等方面有丰富的设计经验。
胡海琴
从事Java EE企业应用开发十余年,曾经参与多个大型企业级项目的设计与开发工作,具有丰富的软件系统设计和开发经验。
目錄大綱
基礎準備篇
第 1章 初識Flowable 3
1.1 流程、工作流及相關規範 3
1.1.1 流程的概念 3
1.1.2 工作流介紹 3
1.1.3 BPMN規範 6
1.2 Flowable介紹 13
1.2.1 工作流開源框架 13
1.2.2 Flowable的特點 13
1.3 Flowable之初體驗 14
1.3.1 下載Flowable安裝包 14
1.3.2 啟動Flowable UI 14
1.3.3 Flowable初體驗:運行Flowable UI 15
1.4 本章小結 20
第 2章 Flowable流程設計器集成與使用 21
2.1 使用IDEA集成Flowable流程設計器 21
2.1.1 在IDEA中安裝Flowable BPMN visualizer流程設計器插件 21
2.1.2 使用IDEA繪制BPMN流程圖 22
2.2 使用Eclipse集成Flowable流程設計器 25
2.2.1 在Eclipse中安裝Flowable BPMN Designer插件 25
2.2.2 使用Eclipse繪制BPMN流程圖 26
2.3 本章小結 30
第3章 Flowable工作流引擎配置 31
3.1 Flowable工作流引擎的配置 31
3.1.1 工作流引擎配置對象ProcessEngineConfiguration 31
3.1.2 工作流引擎對象ProcessEngine 35
3.2 Flowable工作流引擎配置文件 36
3.2.1 Flowable配置風格 37
3.2.2 Spring配置風格 37
3.3 數據庫連接配置 38
3.3.1 數據庫連接屬性配置 38
3.3.2 數據庫策略屬性配置 40
3.4 其他屬性配置 40
3.4.1 歷史數據級別配置 40
3.4.2 異步執行器配置 41
3.4.3 郵件服務器配置 44
3.4.4 事件日誌記錄配置 44
3.5 編寫第 一個Flowable程序 44
3.5.1 建立工程環境 44
3.5.2 創建配置文件 47
3.5.3 創建流程模型 47
3.5.4 加載流程模型與啟動流程 48
3.6 本章小結 49
第4章 Flowable數據庫設計 51
4.1 Flowable數據表設計概述 51
4.2 Flowable數據表結構說明 51
4.2.1 通用數據表 51
4.2.2 流程存儲表 52
4.2.3 身份數據表 53
4.2.4 運行時數據表 56
4.2.5 歷史數據表 64
4.3 Flowable數據庫樂觀鎖 69
4.4 本章小結 69
第5章 Flowable核心概念和API 71
5.1 Flowable核心概念 71
5.1.1 流程定義 71
5.1.2 流程實例 71
5.1.3 執行實例 72
5.2 工作流引擎服務 72
5.3 存儲服務API 73
5.3.1 部署流程定義 74
5.3.2 刪除流程定義 74
5.3.3 掛起流程定義 75
5.3.4 激活流程定義 77
5.4 運行時服務API 78
5.4.1 發起流程實例 78
5.4.2 喚醒一個等待狀態的執行 80
5.5 任務服務API 81
5.5.1 待辦任務查詢 81
5.5.2 任務辦理及權限控制 83
5.5.3 評論和附件管理 86
5.6 歷史服務API 88
5.7 管理服務API 89
5.7.1 數據庫管理 89
5.7.2 異步任務管理 91
5.7.3 執行命令 93
5.8 身份服務API 95
5.9 利用Flowable Service API完成流程實例 96
5.9.1 Flowable工作流引擎工具類 96
5.9.2 綜合使用示例 97
5.10 本章小結 99
常規應用篇
第6章 Flowable身份管理 103
6.1 身份管理引擎 103
6.2 用戶管理 104
6.2.1 新建用戶 105
6.2.2 查詢用戶 105
6.2.3 修改用戶 111
6.2.4 刪除用戶 112
6.2.5 設置用戶圖片 113
6.3 用戶組管理 113
6.3.1 新建用戶組 114
6.3.2 查詢用戶組 114
6.3.3 修改用戶組 117
6.3.4 刪除用戶組 117
6.4 用戶與用戶組關系管理 118
6.4.1 添加用戶至用戶組 118
6.4.2 從用戶組中移除用戶 119
6.4.3 查詢用戶組中的用戶 119
6.4.4 查詢用戶所在的用戶組 120
6.5 用戶附加信息管理 120
6.6 本章小結 121
第7章 Flowable流程部署 123
7.1 流程資源 123
7.2 流程部署 123
7.2.1 DeploymentBuilder對象 123
7.2.2 執行流程部署 124
7.3 部署結果查詢 127
7.3.1 部署記錄查詢 127
7.3.2 流程定義查詢 131
7.3.3 流程資源查詢 135
7.4 流程部署完整示例 136
7.4.1 示例代碼 136
7.4.2 相關表的變更 137
7.5 本章小結 138
第8章 開始事件與結束事件 139
8.1 事件概述 139
8.2 事件定義 139
8.2.1 定時器事件定義 139
8.2.2 信號事件定義 141
8.2.3 消息事件定義 142
8.2.4 錯誤事件定義 143
8.2.5 取消事件定義 143
8.2.6 補償事件定義 143
8.2.7 終止事件定義 143
8.2.8 升級事件定義 143
8.2.9 條件事件定義 144
8.2.10 變量監聽器事件定義 144
8.3 開始事件 144
8.3.1 空開始事件 145
8.3.2 定時器開始事件 146
8.3.3 信號開始事件 147
8.3.4 消息開始事件 148
8.3.5 錯誤開始事件 150
8.3.6 升級開始事件 152
8.3.7 條件開始事件 153
8.3.8 變量監聽器開始事件 153
8.4 結束事件 153
8.4.1 空結束事件 154
8.4.2 錯誤結束事件 154
8.4.3 取消結束事件 156
8.4.4 終止結束事件 159
8.4.5 升級結束事件 159
8.5 本章小結 159
第9章 邊界事件與中間事件 161
9.1 邊界事件 161
9.1.1 定時器邊界事件 161
9.1.2 信號邊界事件 163
9.1.3 消息邊界事件 165
9.1.4 錯誤邊界事件 166
9.1.5 取消邊界事件 168
9.1.6 補償邊界事件 169
9.1.7 條件邊界事件 170
9.1.8 變量監聽器邊界事件 171
9.1.9 升級邊界事件 171
9.2 中間事件 172
9.2.1 定時器中間捕獲事件 172
9.2.2 信號中間捕獲事件和信號中間拋出事件 174
9.2.3 消息中間捕獲事件 177
9.2.4 補償中間拋出事件 177
9.2.5 空中間拋出事件 183
9.2.6 條件中間捕獲事件 183
9.2.7 變量監聽器中間捕獲事件 187
9.2.8 升級中間拋出事件 189
9.3 本章小結 192
第 10章 用戶任務、手動任務和接收任務 193
10.1 用戶任務 193
10.1.1 用戶任務介紹 193
10.1.2 用戶任務分配給辦理人 195
10.1.3 用戶任務分配給候選人(組) 196
10.1.4 動態分配任務 197
10.2 手動任務 202
10.2.1 手動任務介紹 203
10.2.2 手動任務使用示例 203
10.3 接收任務 204
10.3.1 接收任務介紹 204
10.3.2 接收任務使用示例 205
10.4 本章小結 206
第 11章 服務任務、腳本任務和業務規則任務 207
11.1 服務任務 207
11.1.1 服務任務介紹 207
11.1.2 服務任務的屬性註入 210
11.1.3 服務任務的可觸發和異步執行 218
11.1.4 服務任務的執行結果 218
11.1.5 服務任務的異常處理 219
11.1.6 在JavaDelegate中使用Flowable服務 222
11.2 腳本任務 222
11.2.1 腳本任務介紹 222
11.2.2 腳本任務中流程變量的使用 223
11.2.3 腳本任務的執行結果 223
11.3 業務規則任務 223
11.3.1 業務規則任務介紹 224
11.3.2 業務規則任務使用示例 225
11.4 本章小結 228
第 12章 Flowable擴展的系列任務(一) 229
12.1 郵件任務 229
12.2 Camel任務 230
12.2.1 Camel任務介紹 230
12.2.2 Flowable與Camel集成 230
12.2.3 Camel任務使用示例 233
12.3 Mule任務 235
12.3.1 Mule任務介紹 236
12.3.2 Mule的集成與配置 236
12.3.3 Mule任務使用示例 240
12.4 Shell任務 242
12.4.1 Shell任務介紹 243
12.4.2 Shell任務使用示例 243
12.5 本章小結 244
第 13章 Flowable擴展的系列任務(二) 245
13.1 Http任務 245
13.2 外部工作者任務 250
13.3 Web Service任務 253
13.3.1 Web Service任務介紹 253
13.3.2 Web Service任務使用示例 255
13.4 決策任務 259
13.4.1 決策任務介紹 259
13.4.2 決策任務使用示例 260
13.5 本章小結 264
第 14章 順序流與網關 265
14.1 順序流 265
14.1.1 標準順序流 265
14.1.2 條件順序流 266
14.1.3 默認順序流 268
14.2 網關 269
14.2.1 排他網關 269
14.2.2 並行網關 272
14.2.3 包容網關 274
14.2.4 事件網關 277
14.3 本章小結 279
第 15章 子流程、調用活動、泳池與泳道 281
15.1 子流程 281
15.1.1 內嵌子流程 281
15.1.2 事件子流程 285
15.1.3 事務子流程 292
15.2 調用活動 298
15.2.1 調用活動介紹 298
15.2.2 調用活動使用示例 300
15.2.3 內嵌子流程與調用活動的區別 304
15.3 泳池與泳道 304
15.4 本章小結 305
第 16章 監聽器 307
16.1 執行監聽器與任務監聽器 307
16.1.1 執行監聽器 307
16.1.2 任務監聽器 314
16.2 全局事件監聽器 318
16.2.1 全局事件監聽器工作原理 319
16.2.2 支持的事件類型 319
16.2.3 事件監聽器的實現 322
16.2.4 配置事件監聽器 323
16.2.5 事件監聽器使用示例 326
16.2.6 日誌監聽器 329
16.2.7 禁用事件監聽器 329
16.3 本章小結 329
第 17章 多實例實戰應用 331
17.1 多實例概述 331
17.1.1 多實例的概念 331
17.1.2 多實例的配置 332
17.1.3 多實例與其他流程元素的搭配使用 333
17.2 多實例用戶任務應用 335
17.3 多實例服務任務應用 341
17.4 多實例子流程應用 343
17.5 本章小結 346
高級實戰篇
第 18章 Flowable核心架構解析 349
18.1 Flowable工作流引擎架構概述 349
18.2 Flowable設計模式 350
18.2.1 Flowable命令模式 350
18.2.2 Flowable責任鏈模式 351
18.2.3 Flowable命令鏈模式 352
18.3 核心代碼走讀 353
18.3.1 流程模型部署 353
18.3.2 流程定義解析 356
18.3.3 流程啟動 360
18.3.4 節點流轉 363
18.3.5 網關控制 368
18.3.6 流程結束 373
18.4 本章小結 376
第 19章 Flowable集成Spring Boot 377
19.1 Spring Boot簡介 377
19.1.1 Spring Boot特性 377
19.1.2 自定義starter 379
19.2 Spring Boot配置詳解 381
19.2.1 配置文件讀取 381
19.2.2 自定義配置屬性 381
19.2.3 多環境配置 382
19.3 手動實現Spring Boot與Flowable 的集成 383
19.3.1 通過Spring Boot配置工作流引擎 384
19.3.2 Flowable、MyBatis與Spring Boot整合 385
19.3.3 通過Spring Boot管理工作流引擎 386
19.4 通過官方starter實現Spring Boot與Flowable的集成 387
19.5 本章小結 387
第 20章 集成外部表單設計器 389
20.1 Flowable支持的表單類型 389
20.1.1 內置表單 389
20.1.2 外置表單 389
20.2 表單數據存儲方案簡介 390
20.2.1 動態建表存儲方案 390
20.2.2 數據寬表存儲方案 390
20.2.3 使用Key/Value格式存儲方案 391
20.2.4 文檔型數據庫存儲方案 391
20.3 集成外部表單設計器 391
20.3.1 創建React工程 392
20.3.2 定義前後端交互接口 394
20.3.3 創建視圖頁面 395
20.3.4 配置頁面路由 401
20.4 自定義表單引擎 402
20.4.1 創建Spring Boot工程 403
20.4.2 集成Flowable 403
20.4.3 集成自定義表單引擎 407
20.4.4 Web服務接口實現 410
20.5 運行示例 416
20.5.1 新建表單模型 416
20.5.2 新建流程定義並綁定表單模型 418
20.5.3 部署流程 418
20.5.4 發起流程實例 419
20.5.5 填寫表單辦理任務 419
20.6 本章小結 420
第 21章 集成在線流程設計器bpmn-js 421
21.1 bpmn-js簡介 421
21.2 bpmn-js與React的集成 421
21.2.1 React開發環境搭建 421
21.2.2 React與bpmn-js的集成 423
21.2.3 bpmn-js的屬性面板實現 425
21.2.4 bpmn-js的漢化 426
21.3 bpmn-js與Flowable的集成 427
21.3.1 bpmn-js擴展用戶節點屬性 427
21.3.2 保存Flowable流程模型 430
21.4 本章小結 433
第 22章 Flowable自定義擴展(一) 435
22.1 自定義ProcessEngineConfiguration擴展 435
22.1.1 自定義ProcessEngineConfiguration 435
22.1.2 編寫工作流引擎配置文件 435
22.1.3 使用示例 436
22.2 自定義流程元素屬性 437
22.2.1 使用ExtensionElement自定義流程元素屬性 437
22.2.2 使用ExtensionAttribute自定義流程元素屬性 438
22.2.3 使用示例 439
22.3 自定義流程活動行為 442
22.3.1 創建自定義流程活動行為類 444
22.3.2 創建自定義流程活動行為工廠 446
22.3.3 在工作流引擎中設置自定義流程活動行為工廠 446
22.3.4 使用示例 446
22.4 自定義事件 447
22.4.1 創建自定義事件類型 447
22.4.2 創建自定義事件 448
22.4.3 實現自定義事件監聽器 448
22.4.4 使用示例 449
22.5 自定義流程校驗 450
22.5.1 創建自定義校驗規則 450
22.5.2 重寫流程校驗器 451
22.5.3 在工作流引擎中設置自定義流程校驗器 451
22.5.4 使用示例 453
22.6 實現多租戶動態切換多數據源 454
22.6.1 Flowable對多租戶多數據源模式的支持 454
22.6.2 Flowable對多租戶多數據源模式的實現 455
22.7 本章小結 460
第 23章 Flowable自定義擴展(二) 461
23.1 自定義Flowable身份管理引擎 461
23.1.1 自定義實體管理器和數據管理器 461
23.1.2 自定義身份管理引擎配置及配置器 466
23.1.3 在工作流引擎中註冊自定義身份管理引擎 467
23.1.4 使用示例 469
23.2 適配國產數據庫 470
23.2.1 修改SQL腳本模式 470
23.2.2 修改Liquibase模式 473
23.2.3 使用示例 474
23.3 自定義查詢 477
23.3.1 使用NativeSql查詢 477
23.3.2 使用CustomSql查詢 480
23.4 本章小結 484
第 24章 Flowable自定義擴展(三) 485
24.1 自定義流程活動 485
24.1.1 流程定義XML文件解析原理 485
24.1.2 自定義Mq任務的實現 485
24.1.3 使用示例 490
24.2 更換默認Flowable流程定義緩存 491
24.2.1 Flowable流程定義緩存的用途 491
24.2.2 自定義Flowable流程定義緩存 492
24.3 手動創建定時器任務 500
24.3.1 創建自定義作業處理器 500
24.3.2 在工作流引擎中註冊自定義作業處理器 501
24.3.3 使用示例 502
24.4 自定義業務日歷 503
24.4.1 自定義業務日歷的實現 503
24.4.2 使用示例 505
24.5 本章小結 507
第 25章 本土化業務流程場景的實現(一) 509
25.1 動態跳轉 509
25.1.1 Flowable對動態跳轉的支持 509
25.1.2 動態跳轉的基礎場景 511
25.1.3 動態跳轉與網關結合場景 513
25.1.4 動態跳轉與子流程結合場景 517
25.1.5 動態跳轉與調用活動結合場景 521
25.2 任務撤回 525
25.2.1 任務撤回的擴展實現 525
25.2.2 任務撤回使用示例 529
25.3 流程撤銷 530
25.3.1 流程撤銷的擴展實現 531
25.3.2 流程撤銷使用示例 533
25.4 本章小結 534
第 26章 本土化業務流程場景的實現(二) 535
26.1 通過代碼創建流程模型 535
26.1.1 工具類實現 535
26.1.2 使用示例 538
26.2 為流程實例動態增加臨時節點 539
26.2.1 動態增加臨時節點的擴展實現 541
26.2.2 動態增加臨時節點的使用示例 544
26.3 會簽加簽/減簽 546
26.3.1 會簽加簽/減簽的擴展實現 546
26.3.2 會簽加簽/減簽的使用示例 549
26.4 本章小結 552
第 27章 本土化業務流程場景的實現(三) 553
27.1 流程復活 553
27.1.1 流程復活擴展實現 553
27.1.2 流程復活使用示例 555
27.2 任務知會 557
27.2.1 任務知會擴展實現 557
27.2.2 任務知會使用示例 559
27.3 流程節點自動跳過 561
27.4 流程實例跨版本遷移 562
27.4.1 Flowable對流程實例跨版本遷移的支持 562
27.4.2 流程實例跨版本遷移使用示例 563
27.5 動態修改流程定義元素屬性 567
27.5.1 動態修改流程定義元素屬性的思路 567
27.5.2 動態修改流程定義元素屬性的使用示例 568
27.6 多語種支持 570
27.6.1 Flowable多語種的支持 570
27.6.2 流程多語種設置使用示例 571
27.7 本章小結 573
架構擴展篇
第 28章 Flowable性能與容量優化 577
28.1 ID生成器優化 577
28.1.1 數據庫ID生成器DbIdGenerator 577
28.1.2 UUID生成器StrongUuidGenerator 578
28.1.3 自定義ID生成器 579
28.2 定時器優化 580
28.2.1 Flowable定時器執行過程 580
28.2.2 Flowable定時器優化 581
28.3 歷史數據異步化 585
28.3.1 Flowable異步歷史機制 585
28.3.2 基於RocketMQ的歷史數據異步化 588
28.3.3 基於MongoDB的歷史數據異步化 590
28.3.4 數據一致性保證 596
28.4 本章小結 598
第 29章 Flowable多引擎架構的初階實現 599
29.1 多引擎架構分析 599
29.1.1 水平分庫分表方案的局限性 599
29.1.2 多引擎架構方案設計 600
29.2 多引擎建模服務實現 601
29.2.1 建模服務搭建 601
29.2.2 工作流引擎服務緩存改造 602
29.3 工作流引擎路由 604
29.3.1 Pika與Spring Boot的整合 605
29.3.2 將路由信息寫入Pika 606
29.4 建立服務網關 609
29.4.1 Spring Cloud Gateway簡介 609
29.4.2 Spring Cloud Gateway服務搭建 609
29.4.3 新發起流程路由配置 610
29.4.4 已有流程路由配置 611
29.5 本章小結 613
第30章 Flowable多引擎架構的高階實現 615
30.1 工作流引擎集群搭建 615
30.1.1 Nacos服務搭建 615
30.1.2 基於Nacos的引擎集群構建 616
30.1.3 引擎集群路由配置 618
30.2 網關動態路由配置 619
30.2.1 引擎信息動態配置 619
30.2.2 路由信息動態配置 620
30.3 流程查詢服務搭建 623
30.3.1 Elasticsearch與Spring Boot的整合 623
30.3.2 將數據寫入Elasticsearch 623
30.3.3 創建查詢服務 626
30.4 本章小結 627