activiti工作流

一. 介绍

1.activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。

2.activiti的核心组成

image

几大核心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)
  1. 项目的resource目录下新建一个processess文件夹,存放.bpmn文件

在resource/processess下新建一个bpmn文件,如图直接拖动画出一个流程示例

image

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

https://blog.csdn.net/yerenyuan_pku/article/details/71307305?utm_medium=distribute.pc_relevant.none-task-blog-title-7&spm=1001.2101.3001.4242

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343