springboot + activiti实现activiti微服务化

这篇具有很好参考价值的文章主要介绍了springboot + activiti实现activiti微服务化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述

本文介绍如何将springboot+activiti进行整合,并配合eureka,zuul和feign实现activiti的微服务化,将流程控制和业务逻辑分离. 并实现了几个比较特殊的功能,比如时间段委托(某人请假或出差,出差时间内,所有待办交给被委托人处理),比如节点的无限级加签功能(流程本身有不确定性,临时增加审核人)

详细

一、分析流程

整理了一下整个流程,共分以下四个步骤:

1.首先进行springboot2.x和activiti的整合。
    注1:整合不需要太多的操作,只需引入指定pom索引,并简单添加配置就能直接使用;
    注2:整合包括了activiti的模型编辑插件activiti-moleder的整合和简单修改;
    注3:附件中存在几个可以直接运行的bpmn文件,分别对应了几个功能
2.添加eureka-server和zuul,并创建一个工作流功能的使用者,使用feign对activiti的暴露方法进行访问实现流程流转,将核心功能和流转功能分开,核心功能自己保留,流转功能以接口的方式暴露,实现activiti的微服务化。
    注1:流程使用者需要自己编写对应的业务流程,工作流模块只负责流程管理,将业务和流程控制最大限度解耦分离。
    注2:核心功能包括模型创建,编辑,定义,导出,用户用户组的整合;
    注3:流转功能包括提交,完成,查询流程变量,获取流程自定义表单,获取待办已办事项等;
3.实现时间段委托功能
    注1:例如某人需要请假或者出差,请假出差期内,他的所有待办事项将交于被委托人处理。
    注2:一旦委托,将只有被委托人可以看到任务,委托人将失去该任务的审核权限(待完善);
    注3:只能实现办理人和候选人的委托,候选组内人员的委托未实现;
    注4:实现方法是通过全局事件监听器对用户实体创建的时间进行监听,然后修改
4.实现节点的无限级加签
    注1:功能有些变态,因为个人理解,如果业务部门没有固定的流程,没有必要使用工作流引擎,手写流程他不香吗?
    注2:限制比较高,需要用户任务节点使用多实例串行类型;
    注3:加签的实现方式有很多,有手动增加节点,并持久化(持久化是为了日志),有多实例任务加签(非串行)等,这里只实现了串行多实例加签;
5.实现节点的自定义表单
    注1:自定义表单分为内置表单和外置表单,一个保存字段信息,一个保存的是外部制作好的表单的key
    注2:本demo只实现了内置表单,即字段信息保存;
    注3:这种方法需要前端拿到字段之后,进行手动渲染;

二、具体实现过程及问题解决

第一步:

1.创建springboot项目,引入activiti的pom索引,以及配置文件;
pom.xml

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

注意:这里有个坑,使用tk.mybatis和activiti整合的伙伴注意了,要将这个排除

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

application.yml

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

然后直接运行会发现数据库中多了二十多张表

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

2.整合activiti-modeler:
先导入activiti-modeler的端文件

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

在传入必要的activiti的几个配置以及接口(必要接口,附件中有这里就不贴了,图片太多了影响阅读)

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

3.到此集成结束,正常的话可以直接运行,这是需要自行解决前端问题,最终结果如下:

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java


 

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

成功!第一步结束!

第二步:

1.创建工作流任务使用者,并使用eureka,zuul以及feign进行微服务调用
如果需要查看eureka+zuul+feign的使用,请移步至springboot+eureka+zuul 完整demo
创建一个新的模块和activiti模块平级,这个模块包含具体的业务和流转服务接口的调用

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

具体业务代码

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

feign代码

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

具体的页面和请假业务需要自己编写,最终结果如下

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

没有实现登录功能,使用下拉框模拟待办事项的当前登录人

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

第二步骤结束

第三步:

1.实现全局的时间段委托功能
首先添加委托功能的CRUD,根据自己的业务去定义

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

定义一个activiti的全局事件监听器,并注册到springboot中

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

在事件监听器中,监听实体创建时间,并判断当前实体是否为 IdentityLinkEntity ,且是用户,则修改办理人

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

成功!第三步结束!

第四步:

1.实现节点的无限级加签
首先修改模型

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

再修改自定义表单属性

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

最后修改代码,如果需要加签,在act_ru_variables表中修改办理人集合和实例总数即可实现加签,加签后返回,其实是在最后一个节点审批的时候,再加签给第一个办理人

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

第五步:

1.自定义表单的实现
首先在一个用户任务节点配置字段

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

后台取出保存的字段,并返回前端手动渲染

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java


 

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java


 

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

最终结果如下

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java

至此,全部结束,项目最终结构如下,具体实现在demo,demo可直接运行,并包含几个模型文件,可以直接使用

springboot + activiti实现activiti微服务化,WEB系列,spring boot,微服务,java文章来源地址https://www.toymoban.com/news/detail-697163.html

到了这里,关于springboot + activiti实现activiti微服务化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 为什么要将应用微服务化?

    其实在十多年前,“架构师”并不是一个需求很大的职业,一来那时还没有“全民App”级别的应用,除了三大门户网站以外,其他的网上应用业务压力并不大;二来也没有现如今这么丰富的技术选型,几乎清一色的PHP(坊间一直流传着PHP是世界上最好的语言这个说法,我08年左右

    2024年01月18日
    浏览(37)
  • PaddleOCR 服务化部署(基于PaddleHub Serving)

    最近用到百度飞桨的 PaddleOCR,研究了一下PaddleOCR的服务化部署,简单记录一些部署过程和碰到的问题。 基础环境 paddlepaddle 2.5.2 python 3.7 paddlehub 2.1.0 PaddleOCR 2.6 pip 20 部署过程中也尝试多次,不同版本遇到的问题不尽相同,这里选取其中一组进行部署说明 使用 docker部署 paddl

    2024年03月09日
    浏览(33)
  • 【架构设计】单体软件向微服务化演变

    假设单体软件的各模块如下,其中服务包含许多功能模块,如用户管理模块、商品模块、订单模块、仓库模块; 服务化是指对单体服务进行拆分,将一个服务软件拆分为多个相互关联的服务,他们之间相互协作,能正常完成原单体服务的所有业务。 服务化后,有如下优点:

    2024年01月17日
    浏览(70)
  • 为什么要将应用微服务化

    其实在十多年前,“架构师”并不是一个需求很大的职业,一来那时还没有“全民App”级别的应用,除了三大门户网站以外,其他的网上应用业务压力并不大;二来也没有现如今这么丰富的技术选型,几乎清一色的PHP(坊间一直流传着PHP是世界上最好的语言这个说法,我08年左右

    2024年01月17日
    浏览(31)
  • 分布式、服务化的ERP系统架构设计

    ERP 之痛        曾几何时,我混迹于电商、珠宝行业4年多,为这两个行业开发过两套大型业务系统(ERP)。作为一个ERP系统,系统主要功能模块无非是订单管理、商品管理、生产采购、仓库管理、物流管理、财务管理等等。作为一个管理系统,大家的一般开发习惯就是使用

    2024年02月11日
    浏览(33)
  • 【flask】python使用flask发布http服务对算法服务化封装

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 随着应用场景的变化,某些场景中需要调用python的算法对B/S或C/S结构的项目进行支撑,为了将算法服务化,可以使用flask框架对算法进行服务发布,避免不同系统调用算法时进行多次算法的部署以及代码

    2024年04月16日
    浏览(49)
  • PaddleOCR 使用 FastDeploy 服务化部署及postman、java调用服务的方法

    目录 服务化部署 postman调用 java调用 题外话 部署这块大部分按着官方文档来做就差不多 PaddleOCR/deploy/fastdeploy/serving/fastdeploy_serving at dygraph · PaddlePaddle/PaddleOCR · GitHub 提一下两个需要注意的点。 一、如果跟我一样选择的是cpu的版本,那么修改config.pbtxt配置文件时不仅得按官方

    2024年02月08日
    浏览(30)
  • 解析UI页面结构树的逆向解析服务化:技术探索与应用

    “限时免费赠送!人工智能测试开发资料大礼包,把握测试行业的新机遇\\\" 解析UI页面结构树的逆向解析服务化是一项具有挑战性和前景广阔的技术,它可以用于多种场景,例如网页内容分析、自动化测试、网页爬虫等。下面是一些技术探索与应用方面的讨论: 技术探索 HTM

    2024年04月16日
    浏览(36)
  • GroundingDINO(一种开集目标检测算法)服务化,根据文本生成检测框

    最近发现一个叫GroundingDINO的开集目标检测算法,所谓开集目标检测就是能检测的目标类别不局限于训练的类别,这个算法可以通过输入文本的prompt然后输出对应的目标框。可以用来做预标注或者其他应用,比如我们要训练某个细分场景的算法时,我们找不到足够的已经标注的

    2024年02月06日
    浏览(38)
  • 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 基于 Paddle Serving快速使用(服务化部署 - Docker)

    目录 安装 Docker 安装 PaddleOCR 安装 准备PaddleServing的运行环境, 模型转换 Paddle Serving pipeline部署 重启 测试 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 预测部署简介与总览 百度飞桨(PaddlePaddle) - PP-OCRv3 文字检测识别系统 Paddle Inference 模型推理(离线部署) 百度飞桨(Paddl

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包