Activiti 快速入门教程:SpringBoot 集成 Activiti6 + Activiti Modeler 流程配置可视化
- 7大服务与核心表
- 23张表概览
- 7大核心服务(重要)
- 加依赖
- 内部日志
- 初始化 ProcessEngine
- 代码初始化
- activiti.cfg.xml 初始化
- 我的初始化示例
- 集成 Activiti Modeler
- 下载源码
- 新增依赖
- 代码集成
- 前端代码集成
- 后端代码集成
- 结构
- 代码修改
- RepositoryService 注入问题
- 启动器注解修改
- 请求路径调整
- 修改 ModelSaveRestResource.java
- 新增 createModel 接口
- 访问页面
- 汉化
- 参考
7大服务与核心表
23张表概览
Activiti使用到的表都是ACT_开头的。
PS:表中参数具体意思,请直接看转载
ACT_RE_*
:
RE 表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。
ACT_RU_*
:
RU 表示runtime,运行时表-RuntimeService。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。
ACT_ID_*
:
ID 表示identity (组织机构),IdentityService接口所操作的表。用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。
ACT_HI_*
:
HI 表示history,历史数据表,HistoryService。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等
ACT_GE_*
:
全局通用数据及设置(general),各种情况都使用的数据。
序号 | 表名 | 说明 |
1 | act_ge_bytearray | 二进制数据表 |
2 | act_ge_property | 二属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录数据表 |
3 | act_hi_actinst | 历史节点表 |
4 | act_hi_attachment | 历史附件表 |
5 | act_hi_comment | 历史意见表 |
6 | act_hi_identitylink | 历史流程人员表 |
7 | act_hi_detail | 历史详情表,提供历史变量的查询 |
8 | act_hi_procinst | 历史流程实例表 |
9 | act_hi_taskinst | 历史任务实例表 |
10 | act_hi_varinst | 历史变量表 |
11 | act_id_group | 用户组信息表 |
12 | act_id_info | 用户扩展信息表 |
13 | act_id_membership | 用户与用户组对应信息表 |
14 | act_id_user | 用户信息表 |
15 | act_re_deployment | 部署信息表 |
16 | act_re_model | 流程设计模型部署表 |
17 | act_re_procdef | 流程定义数据表 |
18 | act_ru_event_subscr | throwEvent、catchEvent时间监听信息表 |
19 | act_ru_execution | 运行时流程执行实例表 |
20 | act_ru_identitylink | 运行时流程人员表,主要存储任务节点与参与者的相关信息 |
21 | act_ru_job | 运行时定时任务数据表 |
22 | act_ru_task | 运行时任务节点表 |
23 | act_ru_variable | 运行时流程变量数据表 |
7大核心服务(重要)
所谓核心服务,就是通过调用服务中开放的接口,去获取自己所需要的数据,甚至改变流程
服务名称 | 描述 |
RepositoryService | Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务。 |
RuntimeService | 在 Activiti 中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。Runtime Service 提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。 |
TaskService | 在 Activiti 中业务流程定义中的每一个执行节点被称为一个 Task,对流程中的数据存取,状态变更等操作均需要在 Task 中完成。Task Service 提供了对用户 Task 和 Form 相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。 |
HistoryService | History Service 用于获取正在运行或已经完成的流程实例的信息,与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。 |
IdentityService | Activiti 中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的 Task。Identity Service 提供了对 Activiti 系统中的用户和组的管理功能。 |
FormService | Activiti 中的流程和状态 Task 均可以关联业务相关的数据。通过使用 Form Service 可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单。 |
ManagementService | Management Service 提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。 |
加依赖
<!-- Activity -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
</dependency>
内部日志
Activiti 使用 SLF4J
作为内部日志框架。在这个例子中,我们使用 log4j
作为 SLF4J
的实现。
加依赖
<!-- 日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.21</version>
</dependency>
resource
目录下新建文件 log4j.properties
log4j.rootLogger=DEBUG, ACT
log4j.appender.ACT=org.apache.log4j.ConsoleAppender
log4j.appender.ACT.layout=org.apache.log4j.PatternLayout
log4j.appender.ACT.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n
初始化 ProcessEngine
代码初始化
// 流程引擎配置
ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl(url)
.setJdbcUsername(username)
.setJdbcPassword(password)
.setJdbcDriver(driverClassName)
// 初始化基础表,不需要的可以改为 DB_SCHEMA_UPDATE_FALSE
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 初始化流程引擎对象
ProcessEngine processEngine = cfg.buildProcessEngine();
activiti.cfg.xml 初始化
代码部分
// 流程引擎配置
ProcessEngineConfiguration cfg = ProcessEngineConfiguration
// 根据文件名获取配置文件
//.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
// 获取默认配置文件,默认的就是 activiti.cfg.xml
.createProcessEngineConfigurationFromResourceDefault()
// 初始化基础表,不需要的可以改为 DB_SCHEMA_UPDATE_FALSE
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
// 初始化流程引擎对象
ProcessEngine processEngine = cfg.buildProcessEngine();
新建 activiti.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<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.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUsername" value="root"/>
<property name="jdbcPassword" value="123456"/>
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
我的初始化示例
我的配置文件 ProcessEngineConfig.java
依赖
-
spring-boot-configuration-processor
加载配置文件 -
lomok
简化 java 代码
<!-- 配置文件处理器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
核心的 7 大服务在这里注册成 bean
后,之后就可以直接使用了
/**
* 流程引擎配置文件
* @author: linjinp
* @create: 2019-10-21 16:49
**/
@Configuration
@ConfigurationProperties(prefix = "spring.datasource")
@Data
public class ProcessEngineConfig {
private Logger logger = LoggerFactory.getLogger(DruidDatsSourceConfig.class);
// 从 yml 配置文件中获取 mysql 配置信息
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.driver-class-name}")
private String driverClassName;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.publicKey}")
private String publicKey;
/**
* 初始化流程引擎
* @return
*/
@Primary
@Bean
public ProcessEngine initProcessEngine() {
logger.info("=============================ProcessEngineBegin=============================");
// 流程引擎配置
ProcessEngineConfiguration cfg = null;
try {
cfg = new StandaloneProcessEngineConfiguration()
.setJdbcUrl(url)
.setJdbcUsername(username)
// 对密码进行解密
.setJdbcPassword(ConfigTools.decrypt(publicKey, password))
.setJdbcDriver(driverClassName)
// 初始化基础表,不需要的可以改为 DB_SCHEMA_UPDATE_FALSE
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
// 默认邮箱配置
// 发邮件的主机地址,先用 QQ 邮箱
.setMailServerHost("smtp.qq.com")
// POP3/SMTP服务的授权码
.setMailServerPassword("xxxxxxx")
// 默认发件人
.setMailServerDefaultFrom("836369078@qq.com")
// 设置发件人用户名
.setMailServerUsername("管理员");
} catch (Exception e) {
e.printStackTrace();
}
// 初始化流程引擎对象
ProcessEngine processEngine = cfg.buildProcessEngine();
logger.info("=============================ProcessEngineEnd=============================");
return processEngine;
}
//八大接口
// 业务流程的定义相关服务
@Bean
public RepositoryService repositoryService(ProcessEngine processEngine){
return processEngine.getRepositoryService();
}
// 流程对象实例相关服务
@Bean
public RuntimeService runtimeService(ProcessEngine processEngine){
return processEngine.getRuntimeService();
}
// 流程任务节点相关服务
@Bean
public TaskService taskService(ProcessEngine processEngine){
return processEngine.getTaskService();
}
// 流程历史信息相关服务
@Bean
public HistoryService historyService(ProcessEngine processEngine){
return processEngine.getHistoryService();
}
// 表单引擎相关服务
@Bean
public FormService formService(ProcessEngine processEngine){
return processEngine.getFormService();
}
// 用户以及组管理相关服务
@Bean
public IdentityService identityService(ProcessEngine processEngine){
return processEngine.getIdentityService();