文章目录
- 一、Flowable表结构
- 1.表结构讲解
- 二、ProcessEngine讲解
- 2.1 加载默认的配置文件
- 2.2 加载自定义配置文件
- 2.3 ProcessEngine源码
- 2.4 ProcessEngineConfiguration中的init()方法
- 2.5 ProcessEngine各种方式对比
- 三、Service服务接口
- 3.1 Service创建方式与名称作用简介
- 四、Flowable图标介绍
一、Flowable表结构
1.表结构讲解
工作流程的相关操作都是操作存储在对应的表结构中,为了能更好的弄清楚Flowable的实现原理和细节,我们有必要先弄清楚Flowable的相关表结构及其作用。在Flowable中的表结构在初始化的时候会创建五类表结构,具体如下:
- ACT_RE :'RE’表示 repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
- ACT_RU:'RU’表示 runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Flowable只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
- ACT_HI:'HI’表示 history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
- ACT_GE: GE 表示 general。 通用数据, 用于不同场景下
- ACT_ID: ’ID’表示identity(组织机构)。这些表包含标识的信息,如用户,用户组,等等。
具体的表结构的含义:
表分类 | 表名 | 解释 |
---|---|---|
一般数据 | 表名 | 解释 |
[ACT_GE_BYTEARRAY] | 通用的流程定义和流程资源 | |
[ACT_GE_PROPERTY] | 系统相关属性 | |
流程历史记录 | 表名 | 解释 |
[ACT_HI_ACTINST] | 历史的流程实例 | |
[ACT_HI_ATTACHMENT] | 历史的流程附件 | |
[ACT_HI_COMMENT] | 历史的说明性信息 | |
[ACT_HI_DETAIL] | 历史的流程运行中的细节信息 | |
[ACT_HI_IDENTITYLINK] | 历史的流程运行过程中用户关系 | |
[ACT_HI_PROCINST] | 历史的流程实例 | |
[ACT_HI_TASKINST] | 历史的任务实例 | |
[ACT_HI_VARINST] | 历史的流程运行中的变量信息 | |
流程定义表 | 表名 | 解释 |
[ACT_RE_DEPLOYMENT] | 部署单元信息 | |
[ACT_RE_MODEL] | 模型信息 | |
[ACT_RE_PROCDEF] | 已部署的流程定义 | |
运行实例表 | 表名 | 解释 |
[ACT_RU_EVENT_SUBSCR] | 运行时事件 | |
[ACT_RU_EXECUTION] | 运行时流程执行实例 | |
[ACT_RU_IDENTITYLINK] | 运行时用户关系信息,存储任务节点与参与者的相关信息 | |
[ACT_RU_JOB] | 运行时作业 | |
[ACT_RU_TASK] | 运行时任务 | |
[ACT_RU_VARIABLE] | 运行时变量表 | |
用户用户组表 | 表名 | 解释 |
[ACT_ID_BYTEARRAY] | 二进制数据表 | |
[ACT_ID_GROUP] | 用户组信息表 | |
[ACT_ID_INFO] | 用户信息详情表 | |
[ACT_ID_MEMBERSHIP] | 人与组关系表 | |
[ACT_ID_PRIV] | 权限表 | |
[ACT_ID_PRIV_MAPPING] | 用户或组权限关系表 | |
[ACT_ID_PROPERTY] | 属性表 | |
[ACT_ID_TOKEN] | 记录用户的token信息 | |
[ACT_ID_USER] | 用户表 |
二、ProcessEngine讲解
2.1 加载默认的配置文件
示例:
@Test
public void test_processEngine02(){
// getDefaultProcessEngine会帮我们加载一个配置文件
ProcessEngine defaultProcessEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println("defaultProcessEngine = " + defaultProcessEngine);
}
// 其中一路跟随代码getProcessEngine -> init()
// resources = classLoader.getResources("flowable.cfg.xml");
// 会发现读取了resources下的配置文件。
使用这种方式,则必须要在resources目录下新建配置文件flowable.cfg.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl"
value="jdbc:mysql://localhost:3306/flowable_learn?serverTimeZone=UTC"/>
<property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="admin"/>
<property name="databaseSchemaUpdate" value="true"/>
<property name="asyncExecutorActivate" value="false"/>
</bean>
</beans>
2.2 加载自定义配置文件
@Test
public void test_processEngine03() {
// ProcessEngines.getProcessEngines(name)注意区别是自定义流程引擎的名称,而不是加载自定义名称配置文件的方法。
// ProcessEngines.getProcessEngine("name");
ProcessEngineConfiguration configuration =
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("flowable.cfg.xml");
System.out.println("configuration = " + configuration);
}
2.3 ProcessEngine源码
package org.flowable.engine;
// ProcessEngineImpl实现类完成对象的注入操作
public interface ProcessEngine {
String VERSION = "6.3.0.1"; // 版本
String getName(); //名称
void close();
// 以下是各种服务
RepositoryService getRepositoryService(); // 资源服务
RuntimeService getRuntimeService(); // 运行时服务
FormService getFormService(); // 表单
TaskService getTaskService(); // 任务
HistoryService getHistoryService(); // 历史
IdentityService getIdentityService(); // 用户
ManagementService getManagementService(); // 管理
DynamicBpmnService getDynamicBpmnService(); // 动态bpmn
// 配置对象
ProcessEngineConfiguration getProcessEngineConfiguration();
}
2.4 ProcessEngineConfiguration中的init()方法
// 这里对init方法做了一些截取,详细的需要自行查找
// org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl#init
// 模板模式的一个实现
public void init() {
this.initConfigurators(); //初始化配置
this.configuratorsBeforeInit();
// 省略......
// 如果使用关系型数据库,则初始化数据源等
if (this.usingRelationalDatabase) {
this.initDataSource();
this.initDbSchemaManagers();
}
this.initHelpers();
this.initVariableTypes(); // 初始化流程变量相关
this.initBeans();
this.initFormEngines(); // 初始化表单引擎
this.initFormTypes();
this.initScriptingEngines(); // 初始化表达式引擎
this.initClock();
this.initCommandExecutors();
this.initServices();
this.initBpmnParser();
this.initProcessDefinitionCache();
this.initAppResourceCache();
this.initJobHandlers();
this.initHistoryJobHandlers();
this.initTransactionFactory();
if (this.usingRelationalDatabase) {
this.initSqlSessionFactory();
}
this.initSessionFactories();
this.initDataManagers();
this.initEntityManagers();
this.initCandidateManager();
this.initHistoryManager();
this.initProcessValidator();
this.initFlowable5CompatibilityHandler();
this.configuratorsAfterInit();
this.afterInitTaskServiceConfiguration();
}
2.5 ProcessEngine各种方式对比
三、Service服务接口
Service是工作流引擎提供用于进行工作部署、执行、管理的服务接口,我们使用这些接口可以操作对应的数据表。
3.1 Service创建方式与名称作用简介
// Flowable的资源管理服务
RepositoryService repositoryService = processEngine.getRepositoryService();
// Flowable的流程运行时管理服务
RuntimeService runtimeService = processEngine.getRuntimeService();
// Flowable的任务管理服务
TaskService taskService = processEngine.getTaskService();
// Flowable的历史管理服务
HistoryService historyService = processEngine.getHistoryService();
// Flowable的引擎管理服务
ManagementService managementService = processEngine.getManagementService();
// 这里只做重点的的列举,关于其他部分详见类:org.flowable.engine.impl.ProcessEngineImpl
名称 | 简介 |
---|---|
RepositoryService | 1. 是activiti的资源管理类。提供给了管理和控制流程部署、发布、定义 的操作。2. 使用工作流建模工具设计的流程图需要使用此service来将流程定义文件的内容部署。 3. 暂停、激活发布包,对应全部和特定流程定义。获取多种资源,如发布包中的文件,或流程引擎自动生成的流程图。获取流程定义的pojo版本,可以通过java来解析流程,而不是xml。 |
RuntimeService | Activiti的流程运行管理类。获取关于流程执行的相关信息。 |
TaskService | Activiti的任务管理类。获取关于任务的相关信息。 |
HistoryService | Flowable的历史管理类。可查询历史信息。执行流程时,引擎会根据配置保存信息,如流程实例启动时间、任务参与者、完成任务时间、每个流程实例的执行路径等。 |
ManagementService | Activiti的引擎管理类。提供了对Flowable流程引擎的管理和维护功能。这些功能不在工作流驱动的应用程序中使用,主要用于Flowable的日常维护。 |
四、Flowable图标介绍
BPMN2.0是业务流程建模符号2.0(Business Process Model Notation)的缩写。使用一些符号来明确业务流程设计图的符号规范,增进业务建模沟通效率。作用于BPM上下文布局和可视化。
图标类型 | 示例图 | |
---|---|---|
事件图标 | Flowable中事件包括:启动事件、边界事件、中间事件、结束事件。 | |
活动(任务)图标 | 活动是任务或工作的一个术语。一个活动可以是一个任务,也可以是当前流程的子流程。可以为活动指定不同的类型。 | |
结构图标 | 结构图标可以看作是整个流程活动的结构,一个流程中可以包括子流程。 | |
网关图标 | 网关用来处理决策 |