springboot+activiti5.0整合(工作流引擎)

概述

springboot整合activiti使用modeler进行流程创建,编辑、部署以及删除实例(可运行)

详细

1、现在来说一下流程,先建立spring boot项目,导入对应的jar包。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>5.22.0</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-diagram-rest</artifactId><!-- exclusions:activiti-diagram-rest中含有security的jar包,导致访问springbott需要登录,此处剔除登录--><exclusions><exclusion><artifactId>spring-security-config</artifactId><groupId>org.springframework.security</groupId></exclusion><exclusion><artifactId>spring-security-core</artifactId><groupId>org.springframework.security</groupId></exclusion><exclusion><artifactId>spring-security-crypto</artifactId><groupId>org.springframework.security</groupId></exclusion><exclusion><artifactId>spring-security-web</artifactId><groupId>org.springframework.security</groupId></exclusion></exclusions><version>5.22.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-common-rest</artifactId><version>5.19.0</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-json-converter</artifactId><version>5.22.0</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-modeler</artifactId><exclusions><exclusion><artifactId>spring-security-config</artifactId><groupId>org.springframework.security</groupId></exclusion><exclusion><artifactId>spring-security-core</artifactId><groupId>org.springframework.security</groupId></exclusion><exclusion><artifactId>spring-security-crypto</artifactId><groupId>org.springframework.security</groupId></exclusion><exclusion><artifactId>spring-security-web</artifactId><groupId>org.springframework.security</groupId></exclusion></exclusions><version>5.19.0</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.58</version></dependency><!-- https://mvnrepository.com/artifact/batik/batik-script --></dependencies>

2、从官方发布的activiti-explorer.war包中获取这几个静态资源文件,并复制到对应的目录,如下:

image.png

再复制几个封装好的后台逻辑(保存流程模板等操作);

image.png

2、复制好后,在三个后台文件中分别加入@RequestMapping("/service")路径限制,以免与jar的controller路径冲突:

在这里插入图片描述

修改resources\static\editor-app\app-cfg.js文件,指定为刚刚我们复制的三个文件的访问路径

image.png

其中,stencilset.json文件为我门编辑器的界面控件配置,这个可以自己修改设定。可以增加减少自己实际业务中需要的控件及属性.

3.此时设置我们的数据库链接配置:


server.port=8888
spring.datasource.url=jdbc:mysql://localhost:3306/activitiDemo?characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=GMT&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
##每次应用启动不检查Activiti数据表是否存在及版本号是否匹配 第一次设置为true 会自动创建表结构,之后即可设置为false 提高运行速度
spring.activiti.database-schema-update=true

4、创建maincontroller,开启我们的访问界面入口:

@Autowiredprivate RepositoryService repositoryService;@Autowiredprivate ObjectMapper objectMapper;@Autowiredprivate FormService formService;@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate TaskService taskService;@Autowiredprivate HistoryService historyService;@Autowiredprivate ProcessEngineConfiguration processEngineConfiguration;/*** 创建模型* @param request* @param response* @return*/@RequestMapping("/createModel")public String createModel(HttpServletRequest request, HttpServletResponse response) {String name = "请假流程";String description = "这是一个请假流程";String id = null;try {Model model = repositoryService.newModel();String key = name;//版本号String revision = "1";ObjectNode modelNode = objectMapper.createObjectNode();modelNode.put(ModelDataJsonConstants.MODEL_NAME, name);modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);model.setName(name);model.setKey(key);//模型分类 结合自己的业务逻辑//model.setCategory(category);model.setMetaInfo(modelNode.toString());repositoryService.saveModel(model);id = model.getId();//完善ModelEditorSourceObjectNode editorNode = objectMapper.createObjectNode();editorNode.put("id", "canvas");editorNode.put("resourceId", "canvas");ObjectNode stencilSetNode = objectMapper.createObjectNode();stencilSetNode.put("namespace","http://b3mn.org/stencilset/bpmn2.0#");editorNode.put("stencilset", stencilSetNode);repositoryService.addModelEditorSource(id, editorNode.toString().getBytes("utf-8"));String aa = request.getContextPath();response.sendRedirect(request.getContextPath() + "/modeler.html?modelId=" + id);} catch (Exception e) {e.printStackTrace();}return "index";}

最后启动项目:访问http://localhost:8888/createModel,即可进入到文章开头的编辑器主页

5、创建之后肯定要保存,这就用到了框架自带的保存ModelSaveRestResource类,这里需要注意的是,在实际保存的时候,很可能会报错500,或者403之类的,说明是参数不匹配,这就是我自己踩的一个坑,需要自己修改,把参数展开来入下,如本身没问题,可忽略这一步:

 public void saveModel(@PathVariable String modelId, String name, String description, String json_xml,String svg_xml) { }

6.基本的流程能跑起来之后,上面所说的已经包含了运用modeler创建与保存实例,接下来,还有部署,删除,开启,流程跟踪等步骤,因网上很多都是单元测试实例,对初学者很不友好,所以自己整合了一些简单的界面来演示这些流程,因代码太杂,就直接说明使用流程,并粘贴代码:

具体得自己操作看看,代码会粘贴出来,可自己访问操作http://localhost:8888/index。activiti的数据库,如没有表,会自动创建表,表的说明可自行百度,这部分文章倒是挺多的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/92182.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 AWS 中导入 qcow2 镜像

文章目录 在 AWS 中导入 qcow2 镜像使用的格式和问题步骤概述前提条件转换镜像格式并上传至 S3创建角色并配置策略策略文件内容创建container.json配置文件导入镜像创建 AMI 并启动实例参考:在 AWS 中导入 qcow2 镜像 当我们在多云环境中部署应用时,有时候可能需要把基于 qem…

计算机毕设之基于python+django+mysql的影片数据爬取与数据分析(包含源码+文档+部署教程)

影片数据爬取与数据分析分为两个部分&#xff0c;即管理员和用户。该系统是根据用户的实际需求开发的&#xff0c;贴近生活。从管理员处获得的指定账号和密码可用于进入系统和使用相关的系统应用程序。管理员拥有最大的权限&#xff0c;其次是用户。管理员一般负责整个系统的运…

气传导蓝牙耳机好不好?推荐几款不错的气传导耳机

​在众多的气传导耳机中&#xff0c;如何选择一款适合自己的气传导耳机呢&#xff1f;这需要考虑到自己的需求和预算&#xff0c;同时也需要了解不同品牌和型号的产品特点和优缺点。下面我来推荐几款非常不错的气传导耳机给大家参考&#xff0c;希望大家都能寻找到心仪那款。 …

图像处理 信号处理板 设计原理图:367-基于zynq XC7Z100 FMC接口通用计算平台

基于zynq XC7Z100 FMC接口通用计算平台 一、板卡概述 板卡由SoC XC7Z100-2FFG900I芯片来完成卡主控及数字信号处理&#xff0c;XC7Z100内部集成了两个ARM Cortex-A9核和一个kintex 7的FPGA&#xff0c;通过PL端FPGA扩展FMC、光纤、IO等接口&#xff0c;PS端ARM扩展网络、USB、R…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十一:通用表单组件封装实现

一、本章内容 本章实现通用表单组件,根据实体配置识别实体属性,并自动生成编辑组件,实现对应数据填充、校验及保存等逻辑。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址:

计算机视觉-LeNet

目录 LeNet LeNet在手写数字识别上的应用 LeNet在眼疾识别数据集iChallenge-PM上的应用 LeNet LeNet是最早的卷积神经网络之一。1998年&#xff0c;Yann LeCun第一次将LeNet卷积神经网络应用到图像分类上&#xff0c;在手写数字识别任务中取得了巨大成功。LeNet通过连续使用…

素数之谜揭秘:一文详解试除法判断素数

这是我非常喜欢的一道编程题目。不要小看这道题&#xff0c;它看似简单&#xff0c;实则奥妙无穷。由于这是C语言的入门篇&#xff0c;只介绍最简单&#xff0c;也最容易想到的方法&#xff1a;试除法。但哪怕是试除法&#xff0c;也有不少变化。 要想了解试除法&#xff0c;首…

C# char曲线控件

一、char曲线显示随机数数据 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using Syst…

Linux系统下建立Socket聊天服务器

目录 1.服务器结构 2.各模块函数 2.1 socket函数 2.2 bind函数 2.3 Listen函数 2.4 accept函数 2.5 接收发送函数 2.6 close函数 2.7 connect函数 3 代码段 3.1 服务器代码 1.服务器结构 使用socket的API函数编写服务端和客户端程序的步骤图示: 2.各模块函数 服务…

【100天精通python】Day49:python web编程_web框架,Flask的使用

目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由 3.3.2 动态路由 3.3.3 HTTP 方法 3.3.4 多个路由绑定到一个视图函数 3.3.5 访问URL 参数的路由 3.3.6 带默认值的动态路由 3.3.7 带…

DP读书:鲲鹏处理器 架构与编程(十四)ACPI与软件架构具体调优

一分钟速通ACPI和鲲鹏软件移植 操作系统内核鲲鹏软件移植鲲鹏软件移植流程 编译工具选择编译参数移植案例源码修改案例鲲鹏分析扫描工具 Dependency Advisor鲲鹏代码迁移工具 Porting Advisor 鲲鹏软件性能调优鲲鹏软件性能调优流程CPU与内存子系统性能调优网络子系统性能调优磁…

【ROS 03】ROS通信机制进阶

上一章内容&#xff0c;主要介绍了ROS通信的实现&#xff0c;内容偏向于粗粒度的通信框架的讲解&#xff0c;没有详细介绍涉及的API&#xff0c;也没有封装代码&#xff0c;鉴于此&#xff0c;本章主要内容如下: ROS常用API介绍&#xff1b;ROS中自定义头文件与源文件的使用。…