idea做springBoot集成Activiti开发

2024-08-21 09:48

本文主要是介绍idea做springBoot集成Activiti开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • idea环境搭建
    • pom文件
  • 绘制流程图
  • service介绍
  • 简单实例
    • 部署
    • 启动流程

idea环境搭建

安装插件,搜索安装actiBPM,如果受限于网络,就访问https://plugins.jetbrains.com/plugin/7429-actibpm/versions下载安装

pom文件

activiti6,demo项目

<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter-basic</artifactId><version>6.0.0</version><!--排除自带的mybatis--><exclusions><exclusion><groupId>org.mybatis</groupId><artifactId>*</artifactId></exclusion></exclusions>
</dependency>

activiti7,demo项目

<dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>7.1.0.M4</version><exclusions><!-- 需要排除自带的mybatis --><exclusion><groupId>org.mybatis</groupId><artifactId>*</artifactId></exclusion></exclusions>
</dependency>

绘制流程图

绘制完bpm文件后另存为xml文件,并删除 xmlns=""
在这里插入图片描述根据xml生成图片
在这里插入图片描述再将xml文件改回bpm文件

service介绍

servic解释
RepositoryService仓储服务,用于管理流程仓库,例如:部署,删除,读取流程资源
RuntimeService运行时服务,可以处理所有正在运行状态的流程实例,任务等
TaskService任务服务,用于管理,查询任务,例如:签收,办理,指派等
HistoryService历史服务,可以查询所有历史数据,例如:流程实例,任务,活动,变量,附件等
IdentityService唯一服务,可以管理,查询用户,组之间的关系
ManagementService引擎管理服务,和具体业务无关,主要是可以查询引擎配置,数据库,作业等

简单实例

参考demo项目

部署

/*** 创建流程部署* 在3张表中产生数据* act_ge_bytearray 流程资源文件(2条数据)* act_re_deployment 流程部署(1条数据)* act_re_procdef 流程实例(1条数据)*/
@Test
public void deployProcess() throws Exception{//创建部署环境配置对象DeploymentBuilder deployment = repositoryService.createDeployment();//为本次部署命名deployment.name("公共任务请假流程");//添加流程规则文件和流程规则图片deployment.addClasspathResource("processes/commontask.bpmn").addClasspathResource("processes/commontask.png");//部署deployment.deploy();
}/*** 查询流程定义信息* ProcessDefinition有4大属性要关注:* id      {key}:{version}:{随机序列}* name    流程规则文件process节点的name属性* key     流程规则文件process节点的id属性* version 流程版本,如果key存在,则在当前最高版本上加1;如果key不存在,从1开始*/
@Test
public void queryProcessDefinition() throws Exception{//创建查询对象ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();//添加查询条件//执行查询List<ProcessDefinition> list = query.list();//查询数量 query.count();//分页查询 query.listPage(firstResult, maxResults);//返回唯一结果,查询结果为多个则报错 query.singleResult();for (ProcessDefinition processDefinition : list) {System.out.println("id: " + processDefinition.getId() + ", name: " + processDefinition.getName()+ ", key: " + processDefinition.getKey() + ", version: " + processDefinition.getVersion());}
}/*** 删除流程部署*/
@Test
public void deleteProcess() throws Exception{//流程部署id,act_re_deployment表idString deploymentId = "17501";//普通删除,会删除部署所产生的3张表信息repositoryService.deleteDeployment(deploymentId);//级联删除,会删除部署规则相关的所有信息,甚至包括历史
//        repositoryService.deleteDeployment(deploymentId, true);
}/*** 查询流程规则文件*/
@Test
public void queryProcessImage() throws Exception{//流程部署id,act_re_deployment表idString deploymentId = "5001";//部署资源名称List<String> resourceNames = repositoryService.getDeploymentResourceNames(deploymentId);//获取指定文件类型的文件String imageName = null;for (String resourceName : resourceNames) {if (resourceName.indexOf(".png") >= 0) {imageName = resourceName;}}//获取指定文件if (StringUtils.isNotBlank(imageName)) {try (InputStream in = repositoryService.getResourceAsStream(deploymentId, imageName);OutputStream out = new FileOutputStream(new File("E:\\a.png"))) {IOUtils.copy(in, out);} catch (Exception e) {e.printStackTrace();}}}

启动流程

/**
* 1.启动流程
* 关注2张表:
* act_ru_execution : 所有流程按照规则指定到活动节点时,都会产生一个对应的Execution
* act_ru_task      : 只针对人工任务,针对Execution做的扩展信息描述
*/
@Test
public void startProcess() throws Exception{//流程定义的keyString processDefinitionKey = "commontask";//根据流程定义的id启动流程//runtimeService.startProcessInstanceById(processDefinitionKey);//根据流程定义act_re_deployment表key启动最新版本的流程ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println("processInstance: "+processInstance);
}/**
* 2.查看私有任务
*/
@Test
public void queryPersonalTask() throws Exception{//流程实例idString processInstanceId = "2501";//代理人(办理人)String assignee = "副经理";//创建任务服务查询对象TaskQuery query = taskService.createTaskQuery();//通过流程实例id查询 query.processInstanceId(processInstanceId);//根据代理人(办理人)查询List<Task> taskList = query.taskAssignee(assignee).list();System.out.println("=====["+assignee+"]私有任务列表=====");taskList.forEach(task -> {System.out.println("id: "+task.getId()+" ,name: "+task.getName()+" ,assignee: "+task.getAssignee()+" ,createTime:"+task.getCreateTime());});
}/**
* 2.查看公共任务
*/
@Test
public void queryCommonTask() throws Exception{//公共任务候选人String candidateuser = "副经理";//创建任务服务查询对象TaskQuery query = taskService.createTaskQuery();//根据候选人查询List<Task> taskList = query.taskCandidateUser(candidateuser).list();System.out.println("=====["+candidateuser+"]公共任务列表=====");taskList.forEach(task -> {System.out.println("id: "+task.getId()+" ,name: "+task.getName()+" ,assignee: "+task.getAssignee()+" ,createTime:"+task.getCreateTime());});
}/**
* 3.认领任务
*/
@Test
public void claimTask() throws Exception{//待认领的公共任务idString taskId = "30002";//认领的用户名String userId = "副经理";taskService.claim(taskId, userId);
}/**
* 4.完成任务
*/
@Test
public void completeTask() throws Exception{//任务id(act_ru_task表id)String taskId = "30002";taskService.complete(taskId);
}/**
* 5.查询流程实例
*/
@Test
public void queryProcessInstancd() throws Exception{//流程实例id(act_ru_execution表id)String processInstanceId = "27501";//创建运行时服务查询对象ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();//查询流程实例ProcessInstance processInstance = query.processInstanceId(processInstanceId).singleResult();if (null == processInstance) {System.out.println("流程已经结束");} else {System.out.println("获取到流程: "+processInstance);}}

这篇关于idea做springBoot集成Activiti开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1092819

相关文章

Java实现字节字符转bcd编码

《Java实现字节字符转bcd编码》BCD是一种将十进制数字编码为二进制的表示方式,常用于数字显示和存储,本文将介绍如何在Java中实现字节字符转BCD码的过程,需要的小伙伴可以了解下... 目录前言BCD码是什么Java实现字节转bcd编码方法补充总结前言BCD码(Binary-Coded Decima

SpringBoot全局域名替换的实现

《SpringBoot全局域名替换的实现》本文主要介绍了SpringBoot全局域名替换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录 项目结构⚙️ 配置文件application.yml️ 配置类AppProperties.Ja

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有