手把手教大家编译 flowable 源码

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 手把手教大家编译 flowable 源码

要说这个编译源码其实没什么技术含量,但是由于国内的网络问题,Spring 等各种常见框架的源码编译都变成了一个有技术含量的工作,你得学会去解决各种在编译的过程中可能出现的问题。

今天松哥就来和大家聊一聊 flowable 源码编译,其实主要是和大家说说这里的几个坑。

1. 下载源码

这个简单,大家直接从 GitHub 上将源码 clone 下来即可:

git clone git@github.com:flowable/flowable-engine.git

这一步比较容易,大家应该都不存在问题。

aa9757135ac276eb82429ed2aace0dc9.png

2. IDEA 打开项目

由于这个源码也是一个 Maven 工程,所以接下来直接 IDEA 打开源码即可。

a24b3a462df3e22bc383afacd6ff83ae.png

松哥亲测,master 分支上的代码有点问题,所以建议大家切换到一个稳定的版本上再去编译。

官方目前在 GitHub 上发布的最新 release 版本是 6.7.2 这个版本,所以为了源码编译顺利,接下来在右下角找到 6.7.2 这个版本,并切换:

3d090c2a106a6cdcfd8d2dd71675eb2a.png

切换完成之后,接下来我们要先来看看源码中每个目录都是干嘛的。

distro

docker:这个里边放的是将 flowable 构建成 docker 镜像的脚本。

docs:这个是文档。在 docs/docusaurus/docs 目录下有官方已经构建好的现成的脚本,我们也可以执行 docs/userguide/src/zh_CN/form 等目录下的脚本文件,构建自己需要的文档。一般来说不需要,直接看官方文档就够用了。

ide-settings:这个目录下放的是 Eclipse 和 IDEA 中的配置文件,辅助开发用的,但是感觉实际作用有限,我们平时开发也很少导入这两个配置,大家了解即可。

k8s:看目录就知道,这个里边放的是 flowable 支持 K8s 的一些脚本和配置。

modules:flowable 中的所有核心功能代码都在这个里边了。

qa:这个里边是 flowable 各种各样的配置模版,不过我们现在基本上都是 Spring Boot 开发,很多时候并不需要手动再去配置什么,都是直接上来写业务就行了,所以这些配置模版大家了解下即可。

scripts:这个目录下放了一些常用的脚本,例如执行 build-all.sh 脚本用来构建项目。

tooling:这个目录中的内容给出了一个单元测试的模版。

LICENSE:开源协议等。

README.md:介绍文档。

好了,整体上了解了之后,现在大家知道,modules 目录才是核心。

不过,由于模块较多,IDEA 不一定总是能够识别出所有的 Maven 项目,如果一个项目的 pom.xml 是红色而不是蓝色,就说明 IDEA 没能识别出来这个 Maven 项目,像下面这样:


image.png


此时我们要打开这个 pom.xml 文件,然后鼠标右键单击,选择 Add as Maven Project,如下:

8e044f6e32064b76ef522a1a373391c9.png


使之成为一个正儿八经的 Maven 工程。

最终的结果,就是确保所有 Maven 工程都是黑色的而不是灰色的,就表示没有问题了,如下图:

00554ea889845b818fa04830baa44ea1.png

第二小节的工作看着很简单,但是实际操作起来非常费事,最大的原因还是网络问题。Maven 经常会下载失败,所以需要大家反复多试,从阿里镜像站切换到华为镜像站,再切换回官方的镜像站,反正就是反复重试,直到需要的依赖都下载成功。

3. 启动 flowable-ui

接下来,我们就可以启动 flowable-ui 这个工程了。

这个工程本质上就是一个 Spring Boot 工程,所以关键是要大家找到启动类,位置在

modules/flowable-ui/flowable-ui-app/src/main/java/org/flowable/ui/application/FlowableUiApplication.java

f3894c5e27b826f9c10d3f1d0bd4f91e.png


这个直接启动即可。

启动之后就跟松哥之前给大家介绍的 Flowable-UI 一样了,该咋用咋用.

这里默认使用的是 H2 数据库,H2 是一个 Java 编写的关系型数据库,它可以被嵌入 Java 应用程序中使用,或者作为一个单独的数据库服务器运行。这个 H2 数据库有点类似于移动端的 SqlLite 数据库。

我们打开 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件,可以看到关于 H2 数据库的一些配置信息,如下:


885c0125da95bca0e3b0f0d59c079e07.png

从这个配置中可以看出来三个核心信息:

H2 数据库将来会自动生成数据库文件,文件位于系统当前用户目录下,在系统当前用户目录下会自动创建 flowable-db 文件夹,然后在该文件夹下创建 engine-db 文件,就是我们的数据库文件了。

H2 数据库的用户名是 flowable。

H2 数据库的用户密码是 flowable。

好了,现在我们在 flowable-ui 中,我们新建几个用户和组,如下:

新建四个用户:


035d83771fbb34fcbef86d6389475b20.png

新建两个用户组,假设 zhangsan 和 lisi 是主管,wangwu 和 zhaoliu 是经理,如下:


571c724f23cf142ebcfdbc3d797808c1.png

创建完成之后,我们知道这些数据都是保存在 H2 数据库中,像连接 MySQL 一样,我们也可以连接 H2 数据库,为了省事,我这里就直接使用 IDEA 中自带的数据库连接工具进行连接了。

步骤如下:

首先点击 Database,然后点击 + 添加一个数据源,选择 H2,如下:

f410039df5da3d49dfa7c208570a3fba.png

数据库连接类型选择 URL only:

9b02cba1812b866c11cdd5142d6044d4.png

填入用户名、密码以及数据库地址,这些信息都是从刚才的配置文件中拷贝进来的,填完信息之后,会提示你下载数据库驱动,直接点击下载即可,然后点击下方的 Test Connection 按钮,进行测试,看到如下内容表示数据库已经连接上了。

e2d0056d1851cb9b74cd5c51bec90e1e.png点击 OK,我们就可以看到数据库的连接详情了,如下:

15f3b882ad0cd0168e38090d310001d8.png


关于每张表的作用,松哥之前都已经写过文章和大家介绍过了,现在我们就去 ACT_ID_USER 表去看一下有没有刚刚创建的四个用户信息:

c60f6e526097d7672f69f2d69327155c.png

可以看到,加上 admin 一共有五个用户信息。

相同的道理,ACT_ID_GROUP 表中也可以看到我们创建的组信息:

07a2e551cabe2306504e4858c8b30143.png

可以看到,两个用户组都在。

ACT_ID_MEMBERSHIP 表中,我们可以看到用户和用户组之间的关联关系:

24dbb5d2c586a7fb3186f643eb06089b.png

松哥在之前文章中给大家演示的所有关于 flowable-ui 的功能,涉及到的数据存储,我们现在都可以在连接上 H2 数据库之后进行查看。

既然说到了 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 配置文件的编码格式即可。

修改完成之后,记得先去系统当前用户目录下删除掉 flowable-db 文件夹(如果不删除,则之前的用户还在,这次的配置相当于新添加了一个用户),然后重启系统即可,重启之后,我们就可以以 javaboy/123 进行登录了。

4. 连接 MySQL

有时候我们还是希望能够用上自己熟悉的 MySQL,这个也是支持的,还是通过修改 modules/flowable-ui/flowable-ui-app/src/main/resources/flowable-default.properties 配置文件来实现,具体做法如下:

首先提前在数据库中准备一个名为 flowable-ui 的空的数据库。

然后注释掉 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 数据库驱动,如下:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

然后重启项目即可。

当松哥添加 MySQL 驱动的时候,发现官方已经替我们考虑好了,MySQL 驱动提前在多环境中已经配置好了,位置在 modules/flowable-ui/flowable-ui-app/pom.xml,如下图:

094e888a5539be15a26dc734dfe89f8b.png

所以我们也可以不用自己手动加驱动,直接在在 IDEA 的 Maven 中,选择 profiles,去掉 h2mem,勾选上 mysql 即可,如下图:

495941c7b393a02b67cf08503b566832.png

然后重新启动项目即可。

5. 接口分析

有的小伙伴们可能说,松哥你这个搞的这么麻烦,我用 flowable-ui 直接 docker 安装,多省事呀!那你就领会错我的意思了,flowable-ui 这个功能我觉得是一个非常棒的 demo,基本上你能想到的 flowable 的功能这里都提供了,现在源码都给你了,你想做啥功能照抄就行了。

我举个例子,比如说我们想新建一个用户,那么我们在前端页面,打开浏览器 DEBUG 窗口,观察添加用户的时候操作的接口,如下:


58433b1bef163e66f0627d7d125ada2a.png

我们发现添加用户的接口是 /rest/admin/users/idm-app 是模块名称,忽略之),现在,在源码中我们来一个全文搜索,如下:

d10dfe4afa5ed62f1b74c4a5f1d1fff4.png

如果你想自己做一个用户添加的功能,那么照抄不就行了。

其他启动流程、认领任务、完成任务等功能,都按照类似的方式,我们可以查看其代码实现方式。

所以说,这个 flowable-ui 对我们来说其实是一个很好的学习 DEMO。

6. 小结

好啦,本文主要和小伙伴们分析了如何在本地将 flowable 源码编译跑起来,将来松哥还会有多篇文章,以 flowable-ui 为参考,来和大家分析 flowable 中的各种玩法。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
7238 1
|
数据可视化 前端开发 Java
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)(一)
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化(图解)
4088 0
|
10月前
|
XML 前端开发 Java
SpringBoot整合Flowable【04】- 通过代码控制流程流转
本文介绍了如何使用Flowable的Java API控制流程流转,基于前文构建的绩效流程模型。首先,通过Flowable-UI导出模型文件并部署到Spring Boot项目中。接着,详细讲解了如何通过代码部署、启动和审批流程,涉及`RepositoryService`、`RuntimeService`和`TaskService`等核心服务类的使用。最后,通过实际操作演示了流程从部署到完成的全过程,并简要说明了相关数据库表的变化。本文帮助读者初步掌握Flowable在实际业务中的应用,后续将深入探讨更多高级功能。
1563 0
SpringBoot整合Flowable【04】-  通过代码控制流程流转
|
10月前
|
前端开发 Java API
SpringBoot整合Flowable【07】- 驳回节点任务
本文通过绩效流程的业务场景,详细介绍了如何在Flowable工作流引擎中实现任务驳回功能。具体步骤包括:获取目标任务节点和当前任务节点信息,进行必要的判空和逻辑校验,调用API完成节点回退,并清理相关脏数据(如历史任务和变量)。最后通过测试验证了驳回功能的正确性,确保流程能够成功回退到指定节点并清除中间产生的冗余数据。此功能在实际业务中非常有用,能够满足上级驳回自评等需求。
1349 0
SpringBoot整合Flowable【07】- 驳回节点任务
|
10月前
|
存储 Java 数据安全/隐私保护
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
本文介绍了如何使用Flowable 7.0以下版本的flowable-ui进行流程建模、发布和执行。首先,通过解压并启动flowable-ui war包,访问http://localhost:8080/flowable-ui/idm/#/login登录系统。接着,创建并绘制一个简单的绩效流程模型,包含开始节点、任务节点(自评、上级评、隔级评)和结束节点,并为各节点分配处理人。然后,创建应用并发布绩效流程。最后,通过创建a、b、c三个用户分别完成各节点任务,演示了整个流程的执行过程。本文旨在帮助读者理解Flowable的基本操作和流程元素,后续将介绍通过Java代码控制流程的方法。
2156 1
SpringBoot整合Flowable【03】- 通过Flowable-UI体验一个简单流程
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
53501 11
|
移动开发 前端开发 Java
Flowable 7.0.1 release
Flowable 7.0.1 release
839 1
Flowable流程的挂起与激活详解
Flowable流程的挂起与激活详解
854 1
|
应用服务中间件 Apache 数据安全/隐私保护
flowable-ui部署(6.80)
flowable-ui部署(6.80)
1161 3
|
存储 监控 测试技术
三大工作流引擎技术Activiti、Camunda、Flowable选型指南
三大工作流引擎技术Activiti、Camunda、Flowable选型指南