手把手教大家編譯 flowable 源碼
今天松哥就來和大家聊一聊 flowable 源碼編譯,其實主要是和大家說說這里的幾個坑。
1. 下載源碼
這個簡單,大家直接從 GitHub 上將源碼 clone 下來即可:
git clone git@github.com:flowable/flowable-engine.git
這一步比較容易,大家應(yīng)該都不存在問題。
2. IDEA 打開項目
由于這個源碼也是一個 Maven 工程,所以接下來直接 IDEA 打開源碼即可。
松哥親測,master 分支上的代碼有點問題,所以建議大家切換到一個穩(wěn)定的版本上再去編譯。
官方目前在 GitHub 上發(fā)布的最新 release 版本是 6.7.2 這個版本,所以為了源碼編譯順利,接下來在右下角找到 6.7.2 這個版本,并切換:
切換完成之后,接下來我們要先來看看源碼中每個目錄都是干嘛的。
- distro
- docker:這個里邊放的是將 flowable 構(gòu)建成 docker 鏡像的腳本。
- docs:這個是文檔。在docs/docusaurus/docs? 目錄下有官方已經(jīng)構(gòu)建好的現(xiàn)成的腳本,我們也可以執(zhí)行docs/userguide/src/zh_CN/form 等目錄下的腳本文件,構(gòu)建自己需要的文檔。一般來說不需要,直接看官方文檔就夠用了。
- ide-settings:這個目錄下放的是 Eclipse 和 IDEA 中的配置文件,輔助開發(fā)用的,但是感覺實際作用有限,我們平時開發(fā)也很少導入這兩個配置,大家了解即可。
- k8s:看目錄就知道,這個里邊放的是 flowable 支持 K8s 的一些腳本和配置。
- modules:flowable 中的所有核心功能代碼都在這個里邊了。
- qa:這個里邊是 flowable 各種各樣的配置模版,不過我們現(xiàn)在基本上都是 Spring Boot 開發(fā),很多時候并不需要手動再去配置什么,都是直接上來寫業(yè)務(wù)就行了,所以這些配置模版大家了解下即可。
- scripts:這個目錄下放了一些常用的腳本,例如執(zhí)行 build-all.sh 腳本用來構(gòu)建項目。
- tooling:這個目錄中的內(nèi)容給出了一個單元測試的模版。
- LICENSE:開源協(xié)議等。
- README.md:介紹文檔。
好了,整體上了解了之后,現(xiàn)在大家知道,modules 目錄才是核心。
不過,由于模塊較多,IDEA 不一定總是能夠識別出所有的 Maven 項目,如果一個項目的 pom.xml 是紅色而不是藍色,就說明 IDEA 沒能識別出來這個 Maven 項目,像下面這樣:
此時我們要打開這個 pom.xml 文件,然后鼠標右鍵單擊,選擇 Add as Maven Project,如下:
使之成為一個正兒八經(jīng)的 Maven 工程。
最終的結(jié)果,就是確保所有 Maven 工程都是黑色的而不是灰色的,就表示沒有問題了,如下圖:
第二小節(jié)的工作看著很簡單,但是實際操作起來非常費事,最大的原因還是網(wǎng)絡(luò)問題。Maven 經(jīng)常會下載失敗,所以需要大家反復多試,從阿里鏡像站切換到華為鏡像站,再切換回官方的鏡像站,反正就是反復重試,直到需要的依賴都下載成功。
3. 啟動 flowable-ui
接下來,我們就可以啟動 flowable-ui 這個工程了。
這個工程本質(zhì)上就是一個 Spring Boot 工程,所以關(guān)鍵是要大家找到啟動類,位置在 modules/flowable-ui/flowable-ui-app/src/main/java/org/flowable/ui/application/FlowableUiApplication.java:
這個直接啟動即可。
啟動之后就跟松哥之前給大家介紹的 Flowable-UI 一樣了,該咋用咋用.
這里默認使用的是 H2 數(shù)據(jù)庫,H2 是一個 Java 編寫的關(guān)系型數(shù)據(jù)庫,它可以被嵌入 Java 應(yīng)用程序中使用,或者作為一個單獨的數(shù)據(jù)庫服務(wù)器運行。這個 H2 數(shù)據(jù)庫有點類似于移動端的 SqlLite 數(shù)據(jù)庫。
我們打開 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件,可以看到關(guān)于 H2 數(shù)據(jù)庫的一些配置信息,如下:
從這個配置中可以看出來三個核心信息:
H2 數(shù)據(jù)庫將來會自動生成數(shù)據(jù)庫文件,文件位于系統(tǒng)當前用戶目錄下,在系統(tǒng)當前用戶目錄下會自動創(chuàng)建 flowable-db 文件夾,然后在該文件夾下創(chuàng)建 engine-db 文件,就是我們的數(shù)據(jù)庫文件了。
H2 數(shù)據(jù)庫的用戶名是 flowable。
H2 數(shù)據(jù)庫的用戶密碼是 flowable。
好了,現(xiàn)在我們在 flowable-ui 中,我們新建幾個用戶和組,如下:
新建四個用戶:
新建兩個用戶組,假設(shè) zhangsan 和 lisi 是主管,wangwu 和 zhaoliu 是經(jīng)理,如下:
創(chuàng)建完成之后,我們知道這些數(shù)據(jù)都是保存在 H2 數(shù)據(jù)庫中,像連接 MySQL 一樣,我們也可以連接 H2 數(shù)據(jù)庫,為了省事,我這里就直接使用 IDEA 中自帶的數(shù)據(jù)庫連接工具進行連接了。
步驟如下:
首先點擊 Database,然后點擊 + 添加一個數(shù)據(jù)源,選擇 H2,如下:
數(shù)據(jù)庫連接類型選擇 URL only:
填入用戶名、密碼以及數(shù)據(jù)庫地址,這些信息都是從剛才的配置文件中拷貝進來的,填完信息之后,會提示你下載數(shù)據(jù)庫驅(qū)動,直接點擊下載即可,然后點擊下方的 Test Connection 按鈕,進行測試,看到如下內(nèi)容表示數(shù)據(jù)庫已經(jīng)連接上了。
點擊 OK,我們就可以看到數(shù)據(jù)庫的連接詳情了,如下:
關(guān)于每張表的作用,松哥之前都已經(jīng)寫過文章和大家介紹過了,現(xiàn)在我們就去 ACT_ID_USER 表去看一下有沒有剛剛創(chuàng)建的四個用戶信息:
可以看到,加上 admin 一共有五個用戶信息。
相同的道理,ACT_ID_GROUP 表中也可以看到我們創(chuàng)建的組信息:
可以看到,兩個用戶組都在。
在 ACT_ID_MEMBERSHIP 表中,我們可以看到用戶和用戶組之間的關(guān)聯(lián)關(guān)系:
松哥在之前文章中給大家演示的所有關(guān)于 flowable-ui 的功能,涉及到的數(shù)據(jù)存儲,我們現(xiàn)在都可以在連接上 H2 數(shù)據(jù)庫之后進行查看。
既然說到了 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件,那么我也就順便多說兩句,flowable-ui 默認的用戶名密碼是 admin/test,如果我們想要修改,則可以直接在該配置文件中修改如下幾行即可:
flowable.idm.app.admin.user-id=javaboy
flowable.idm.app.admin.password=123
flowable.idm.app.admin.first-name=江南一點雨
flowable.idm.app.admin.last-name=江南一點雨
flowable.idm.app.admin.email=test-admin@example-domain.tld
中文可能會亂碼,大家記得修改 properties 配置文件的編碼格式即可。
修改完成之后,記得先去系統(tǒng)當前用戶目錄下刪除掉 flowable-db 文件夾(如果不刪除,則之前的用戶還在,這次的配置相當于新添加了一個用戶),然后重啟系統(tǒng)即可,重啟之后,我們就可以以 javaboy/123 進行登錄了。
4. 連接 MySQL
有時候我們還是希望能夠用上自己熟悉的 MySQL,這個也是支持的,還是通過修改 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件來實現(xiàn),具體做法如下:
首先提前在數(shù)據(jù)庫中準備一個名為 flowable-ui 的空的數(shù)據(jù)庫。
然后注釋掉 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件中 H2 的配置,打開 MySQL 的配置,如下:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/flowable-ui?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false&nullCatalogMeansCurrent=true
spring.datasource.username=root
spring.datasource.password=123
最后,再在 modules/flowable-ui/flowable-ui-app/pom.xml 文件中加入 MySQL 數(shù)據(jù)庫驅(qū)動,如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
然后重啟項目即可。
當松哥添加 MySQL 驅(qū)動的時候,發(fā)現(xiàn)官方已經(jīng)替我們考慮好了,MySQL 驅(qū)動提前在多環(huán)境中已經(jīng)配置好了,位置在 modules/flowable-ui/flowable-ui-app/pom.xml,如下圖:
所以我們也可以不用自己手動加驅(qū)動,直接在在 IDEA 的 Maven 中,選擇 profiles,去掉 h2mem,勾選上 mysql 即可,如下圖:
然后重新啟動項目即可。
5. 接口分析
有的小伙伴們可能說,松哥你這個搞的這么麻煩,我用 flowable-ui 直接 docker 安裝,多省事呀!那你就領(lǐng)會錯我的意思了,flowable-ui 這個功能我覺得是一個非常棒的 demo,基本上你能想到的 flowable 的功能這里都提供了,現(xiàn)在源碼都給你了,你想做啥功能照抄就行了。
我舉個例子,比如說我們想新建一個用戶,那么我們在前端頁面,打開瀏覽器 DEBUG 窗口,觀察添加用戶的時候操作的接口,如下:
我們發(fā)現(xiàn)添加用戶的接口是 /rest/admin/users(/idm-app 是模塊名稱,忽略之),現(xiàn)在,在源碼中我們來一個全文搜索,如下:
如果你想自己做一個用戶添加的功能,那么照抄不就行了。
其他啟動流程、認領(lǐng)任務(wù)、完成任務(wù)等功能,都按照類似的方式,我們可以查看其代碼實現(xiàn)方式。
所以說,這個 flowable-ui 對我們來說其實是一個很好的學習 DEMO。
6. 小結(jié)
好啦,本文主要和小伙伴們分析了如何在本地將 flowable 源碼編譯跑起來,將來松哥還會有多篇文章,以 flowable-ui 為參考,來和大家分析 flowable 中的各種玩法。