一. 介绍
1.activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。
2.activiti的核心组成
几大核心api
二. 整合
1.导入依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
需要注意的是,这里的依赖版本,需要对应数据库中act_ge_property表中schema.version版本信息,所以一般不建议在创建完表之后修改依赖信息
2.application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/activitiserverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=truespring.activiti.database-schema-update=true
spring.activiti.check-process-definitions=falsespring.activiti.process-definition-location-prefix=classpath:/processes/
spring.activiti.db-identity-used=true
# process-definition-location-suffixes:
# - **.bpmn
# - **.bpmn20.xml
spring.activiti.db-history-used=true
spring.activiti.history-level=full
3.安装actibpm插件。file--》plugin--》搜索actiBPM安装即可。
4.Help-EditCustomVmOption-
-Dfile.encoding=UTF-8
防止bpmn文件中文乱码
5.启动类
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
- 项目的resource目录下新建一个processess文件夹,存放.bpmn文件
在resource/processess下新建一个bpmn文件,如图直接拖动画出一个流程示例
7.点击空白处设置id和name。
8.activiti默认的ID生成策略在高并发场景下会出现ID重复的情况,因此在高并发场景下建议采用UUID的策略。修改activiti配置文件,增加以下语句,并增加IdGen类。
@Configuration
public class ActivitiConfigimplements ProcessEngineConfigurationConfigurer {
@Override
public void configure(SpringProcessEngineConfigurationspringProcessEngineConfiguration) {
springProcessEngineConfiguration.setIdGenerator(newIdGeneratorUtil();
}
}
public class IdGeneratorUtilimplements IdGenerator {
/**
* 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割.
*/
public static String uuid() {
return UUID.randomUUID().toString().replaceAll("-","");
}
@Override
public String getNextId() {
return uuid();
}
}
9.启动项目会在对应数据库中生成28张表
Activiti的后台是有数据库的支持的,所有的表都以ACT_开头。第二部分是表示用途的两个字母标识。用途也和服务的API对应
ACT_RE_*:’RE’表示repository。这个前缀的表包含了流程定义和流程静态资源 (图片,规则等等)。
ACT_RU_*:’RU’表示runtime。这些是运行时的表,包含流程实例,任务,变量,异步任务等运行中的数据。Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。这样运行时表可以一直很小且速度很快。
ACT_ID_*:’ID’表示identity。这些表包含身份信息,比如用户,组等等。
ACT_HI_*:’HI’表示history。这些表包含历史数据,比如历史流程实例,变量,任务等等。
ACT_GE_*:通用数据,用于不同场景下。
资源库流程规则表
act_re_deployment:部署信息表
act_re_model:流程设计模型部署表
act_re_procdef:流程定义数据表
运行时数据库表
act_ru_execution:运行时流程执行实例表
act_ru_identitylink:运行时流程人员表,主要存储任务节点与参与者的相关信息
act_ru_task:运行时任务节点表
act_ru_variable:运行时流程变量数据表
act_hi_actinst:历史节点表
act_hi_attachment:历史附件表
act_hi_comment:历史意见表
act_hi_identitylink:历史流程人员表
act_hi_detail :历史详情表,提供历史变量的查询
act_hi_procinst:历史流程实例表
act_hi_taskinst:历史任务实例表
act_hi_varinst:历史变量表
act_id_group :用户组信息表
act_id_info:用户扩展信息表
act_id_membership:用户与用户组对应信息表
act_id_user:用户信息表
这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足。
act_ge_bytearray:二进制数据表
act_ge_property:属性数据表存储整个流程引擎级别的数据,初始化表结构时会默认插入三条记录
10.部署流程
repositoryService.createDeployment().addClasspathResource("singleAssignee.bpmn").deploy();
11.查询待办
List tasks = taskService.createTaskQuery().taskAssignee("kefu").list();
12.根据流程key开启一个流程
ProcessInstance test01 = runtimeService.startProcessInstanceByKey(key);
13.根据任务id提交任务
taskService.complete(taskId);
14.总结操作
总结activiti中的几个对象
几个和流程相关的对象
Deployment:部署对象,和部署表(act_re_deployment)对应
ProcessDefinition:流程定义对象,和流程定义表(act_re_procdef)对应
ProcessInstance:流程实例对象,和流程实例表(act_ru_execution)对应
Task:任务对象,和任务表(act_ru_task)对应
几个Service对象
RepositoryService:操作部署、流程定义等静态资源信息
RuntimeService:操作流程实例,启动流程实例、查询流程实例、删除流程实例等动态信息
TaskService:操作任务,查询任务、办理任务等和任务相关的信息
HistoryService:操作历史信息的,查询历史信息
IdentityService:操作用户和组
几个Query对象
DeploymentQuery:对应查询部署表(act_re_deployment)
ProcessDefinitionQuery:对应查询流程定义表(act_re_procdef)
ProcessInstanceQuery:对应查询流程实例表(act_ru_execution)
TaskQuery:对应查询任务表(act_ru_tas