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