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

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys