SpringBoot整合Flowable【02】- 整合初体验

一、版本选择

在我们正式建立项目前,我们先去flowable的github主页了解一下版本信息,flowable版本上大的区别主要以7.0.X版本作为界线,通过官方的版本说明我们知道7.0版本主要对JDK17和SpringBoot3做了支持,所以各位读者在选择版本的时候要根据自己项目目前Spring和JDK的版本进行选择,如果是非SpringBoot3.X的版本就使用Flowable7.0.X以下的版本就好。

在这里插入图片描述# 二、创建项目

1.建立工程

平平无奇地创建一个项目,我的本机JDK版本为17,这里也就不做调整了。
在这里插入图片描述由于SpringBoot2.X版本已经不再维护了,所以在创建时只能选择SpringBoot3.X版本,但是没关系,我们可以创建成功后在pom文件里修改一下。这里演示demo,我还是选择老派的版本咯。
在这里插入图片描述通过查看github,可以看到 flowable 6.X最新的稳定版本是6.8.1,我也就使用这个版本了。所以,这里也想告诉初学者的一个点就是一定要学会去看文档,毕竟教程是具有滞后性的。通过官方的文档说明,我们springboot版本就使用2.7.18吧。
在这里插入图片描述> 最终,我们的环境是JDK17、Springboot2.7.18、flowable 6.8.1,如果flowable 7.0.X以下的小伙伴使用JDK8也可以,我这只是懒得换环境。

2.导入依赖

这里主要就是Flowable的核心依赖,其他都是通用依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.18</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.pitayafruit</groupId>
    <artifactId>FlowableDemo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>FlowableDemo</name>
    <description>FlowableDemo</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <!-- spring-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!-- spring-boot-test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- flowable -->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.8.1</version>
        </dependency>

        <!-- mysql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.21</version>
        </dependency>

        <!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

        <!-- 日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.12</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>2.0.12</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3.建立数据库

Flowable需要数据库来存储数据,所以我们需要为它建立一个数据库,表结构则会由引擎为我们自动生成。
在这里插入图片描述## 4.创建配置文件
配置没什么好说的,大家根据自己的情况进行配置就好。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/flowable-demo?characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456

5.启动项目测试

项目成功启动时,我们可以看到控制台闪过很多提示信息,那是第一次启动项目,Flowable在为我们创建表。
在这里插入图片描述项目启动成功后,可以在数据库中看到79张表,表示我们初步的整合已经成功了。另外,在实际业务中有条件的话,建议将工作流单独部署一个服务和数据库,一下子多了这么多的表在原有的数据库里,对我们管理还是有影响的。
在这里插入图片描述# 三、表结构

为了更好地理解 Flowable 的实现原理和细节,有必要先理清楚相关表结构及其作用,接下来,我来帮各位读者梳理一下生成的这79张表。

1.表结构分类

Flowable在初始化时会创建五类表结构,具体如下:

  • ACT_RE:'RE’表示repository。这个前缀的表包含了流程定义和流程静态资源(图片,规则等等)。
  • ACT_RU:'RU’表示runtime。这些运行时的表,包含流程实例,任务,变量,异步任务等运行中的数据。Flowable只在流程实例执行过程中保存这些数据,在流程结束时就会删除这些记录。这样运行时表可以一直很小速度很快。
  • ACT_HI:'HI’表示history。这些表包含历史数据,比如历史流程实例,变量,任务等。
  • ACT_GE:'GE’表示general。存储Flowable在各种不同场景下需要的通用数据。
  • ACT_ID:'ID’表示identity (组织机构)。这些表包含标识的信息,如用户,用户组等。

其中ACT_ID类型的表应该在实际业务中是用不上的,因为实际业务都有自己的一套用户表结构,Flowable 里的这套应该是用不上的。

2.常用表的作用

第一次学习的同学可能乍一看这79张表会感到头疼,光是理清楚每张表和字段的作用就要花很长时间。但实际业务中,就像前文中说的,有些表我们从来就不会用,比如引擎自带的用户相关的表,在我们实际业务中,有我们自己的用户组关系和字段,所以在下面的表格中也不做罗列。

表名解释
ACT_GE_BYTEARRAY存储通用的流程定义和流程资源,即每个流程的部署记录。
ACT_GE_PROPERTY存储系统相关属性,主要是Flowable 自身的一些变量。
ACT_HI_ACTINST存储历史的活动信息,记录流程流转过的所有节点。
ACT_HI_ATTACHMENT存储历史的流程的附件表。
ACT_HI_COMMENT存储历史的流程说明性信息。
ACT_HI_DETAIL存储历史的流程运行的细节信息,比如流程中产生的变量详细,包括控制流程流转的变量,业务表单中填写的流程需要用到的变量等。
ACT_HI_ENTITYLINK存储历史参与的人员。
ACT_HI_IDENTITYLINK存储任务参与者数据,主要存储历史节点参与者的信息,可能是 Group 也可能是 User。
ACT_HI_PROCINST存储历史的流程实例,保存每一个历史流程,创建时就生成,一条流程实例对应一个记录。
ACT_HI_TASKINST存储历史的任务实例,记录每一个历史节点,一个 Task 对应一个记录。
ACT_HI_TSK_LOG存储历史的任务操作日志,每一次执行可能会带上数据,存在这里。
ACT_HI_VARINST存储历史的流程运行中的变量信息。
ACT_RE_DEPLOYMENT存储流程部署记录,每次服务重启会部署一次,这里会新增一条记录。
ACT_RE_MODEL存储模型信息,创建模型时,额外定义的一些模型相关信息,存在这张表,默认不保存。
ACT_RE_PROCDEF存储已部署的流程定义,记录流程的变更,流程每变更一次存一条记录,version_字段加1。
ACT_RU_EVENT_SUBSCR存储运行时事件,当流程定义使用事件(信号/消息/等或启动/中间/边界)时,引擎将对该表的引用存储在该表中。
ACT_RU_EXECUTION存储运行时流程执行实例和指向流程实例当前状态的指针。
ACT_RU_IDENTITYLINK存储运行时用户关系信息,即任务节点与参与者的相关信息。
ACT_RU_JOB存储运行时作业。
ACT_RU_TASK存储运行时任务。
ACT_RU_VARIABLE存储运行时变量,是与实例相关的变量。

即使仅仅罗列出这些表,初学者可能依然会觉得很难“记”,但就像我们初学编程时一样,其实根本不需要特意记一些API,在用的过程中慢慢就熟悉了,在下一篇文章里,将带领大家正式开始编码,通过跑完一个简易的流程,让各位读者可以对相关API和表结构有一个初步的认识。😃

<think>好的,我现在要解决SpringBoot整合Flowable-UI时出现404的问题。首先,我需要回忆一下Flowable-UI的基本配置步骤。记得Flowable-UI需要一些特定的依赖和配置,比如Spring Security的设置,可能还需要正确配置静态资源路径。 用户提到404错误,通常意味着资源未找到或者路由配置不正确。可能的原因包括依赖缺失、路径配置错误、过滤器拦截了请求,或者Spring Security没有正确放行相关路径。 首先检查pom.xml中的依赖是否正确。Flowable-UI通常需要引入flowable-ui-modeler、flowable-ui-common等依赖,同时确保Spring Boot版本兼容。如果依赖版本不匹配,可能导致类加载失败,进而引发404。 然后,查看应用配置文件,比如application.properties,确认是否启用了Flowable的REST API和UI。可能需要设置flowable.rest.app.enabled=true。另外,静态资源的路径可能需要调整,例如设置server.servlet.context-path=/flowable,这样访问路径会变成/flowable/ui,否则默认可能是根路径。 接下来,检查Spring Security配置。Flowable-UI有自己的安全配置,可能需要与项目中的Security配置进行整合。如果自定义了SecurityConfig,可能需要排除Flowable相关的路径,或者允许匿名访问这些路径。例如,在configure方法中添加antMatchers("/flowable-ui/**").permitAll()。 另外,检查日志是否有异常信息,比如Bean创建失败或者路径映射错误。有时候类冲突或缺少必要的Bean会导致UI模块无法正确初始化,从而无法注册控制器,导致404。 还有可能的是Servlet配置问题,比如缺少@ServletComponentScan注解,导致Flowable的Servlet或Filter没有被注册。确保主应用类上有这个注解,或者通过配置类显式注册相关组件。 最后,考虑版本兼容性问题。Spring BootFlowable版本需要匹配,查看官方文档确认支持的版本。如果版本不兼容,某些类或配置可能无法加载,导致功能失效。 可能需要逐步排查:先确认依赖正确,再检查配置和路径,然后查看安全设置,最后验证版本兼容性。如果这些步骤都正确,可以尝试创建一个最简单的示例项目,逐步添加功能,找出导致404的具体原因。</think>### SpringBoot整合Flowable-UI出现404的解决方案 #### 1. 检查依赖配置 确保`pom.xml`中引入Flowable-UI的核心依赖且版本SpringBoot兼容: ```xml <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-ui-modeler</artifactId> <version>6.7.2</version> </dependency> ``` **注意**:Flowable 6.x版本需与Spring Boot 2.x配合使用;若使用Spring Boot 3.x需升级到Flowable 7.0+[^1]。 #### 2. 配置静态资源路径 在`application.properties`中添加: ```properties # 启用Flowable REST API flowable.rest.app.enabled=true # 设置上下文路径(避免与现有接口冲突) server.servlet.context-path=/flowable ``` 访问地址将变为:`http://localhost:8080/flowable/ui` #### 3. 安全配置整合 在自定义的`SecurityConfig`类中放行Flowable路径: ```java @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/flowable-ui/**", "/api/**").permitAll() .anyRequest().authenticated() .and().csrf().disable(); } ``` #### 4. 添加Servlet扫描注解 在主启动类添加注解确保Flowable组件加载: ```java @ServletComponentScan("org.flowable.ui") @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 5. 日志排查 检查启动日志中是否包含以下关键信息: ``` Mapped URL path [/flowable-ui] onto handler... Flowable UI applications available at [/ui] ``` 若缺失则说明路由注册失败,需检查Filter配置或依赖冲突。 #### 典型错误场景示例 某开发者因未配置`server.servlet.context-path`导致实际访问路径为`http://localhost:8080/ui`,而服务器预期路径为`http://localhost:8080/flowable/ui`,最终通过明确上下文路径解决404问题[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值