当前位置: 首页 > news >正文

【Flowable】Springboot使用Flowable(一)

一、项目依赖

<dependency><groupId>org.flowable</groupId><artifactId>flowable-engine</artifactId><version>6.3.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.21</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version></dependency>

二、新建Test类

public class Test01 {/*** 获取流程引擎对象*/@Testpublic void testProcessEngine() {// 获取 ProcessEngineConfiguration 对象ProcessEngineConfiguration configuration = new StandaloneProcessEngineConfiguration();//配置相关的数据库连接信息configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");configuration.setJdbcUsername("xxx");configuration.setJdbcPassword("xxx");configuration.setJdbcUrl("jdbc:mysql://xxx/flowable?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");//如果数据库中的表结构不存在就新建configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);//构建流程引擎对象ProcessEngine processEngine = configuration.buildProcessEngine();System.out.println("processEngine = " + processEngine);}ProcessEngineConfiguration configuration = null;@Beforepublic void before() {// 获取 ProcessEngineConfiguration 对象configuration = new StandaloneProcessEngineConfiguration();//配置相关的数据库连接信息configuration.setJdbcDriver("com.mysql.cj.jdbc.Driver");configuration.setJdbcUsername("xxxx");configuration.setJdbcPassword("xxxx");configuration.setJdbcUrl("jdbc:mysql://xxxxx/flowable?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai");//如果数据库中的表结构不存在就新建configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);}/*** 部署流程*/@Testpublic void testDeploy() {//1.获取ProcessEngine 对象ProcessEngine processEngine = configuration.buildProcessEngine();//2.获取RepositoryServiceRepositoryService repositoryService = processEngine.getRepositoryService();//3.完成流程部署操作Deployment deploy = repositoryService.createDeployment().addClasspathResource("test.bpmn20.xml") //关联要部署的流程名称.name("请假流程").deploy(); //部署流程System.out.println("id: " + deploy.getId());System.out.println("name: " + deploy.getName());System.out.println("key: " + deploy.getKey());}/*** 查询部署流程的定义信息*/@Testpublic void testDeployQuery() {ProcessEngine processEngine = configuration.buildProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();//创建流程查询对象ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery();ProcessDefinition processDefinition = processDefinitionQuery.deploymentId("15001").singleResult();//部署的流程图ID,常用来做版本控制System.out.println("processDefinition.getDeploymentId() = " + processDefinition.getDeploymentId());//流程名称System.out.println("processDefinition.getName() = " + processDefinition.getName());//流程描述System.out.println("processDefinition.getDescription() = " + processDefinition.getDescription());//流程图idSystem.out.println("processDefinition.getId() = " + processDefinition.getId());//流程唯一标识System.out.println("processDefinition.getKey() = " + processDefinition.getKey());}/*** 删除部署的流程*/@Testpublic void testDeleteDeploy() {ProcessEngine processEngine = configuration.buildProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();//删除部署ID为1的,如果部署的流程启动了 则没法删除
//        repositoryService.deleteDeployment("1");// 第二个参数是级联删除,如果流程启动了也可以进行删除,相关的任务也会被删除repositoryService.deleteDeployment("7501", true);}/*** 启动流程*/@Testpublic void testStartProcess() {//id :2501ProcessEngine processEngine = configuration.buildProcessEngine();//通过runtimeService 启动流程实例RuntimeService runtimeService = processEngine.getRuntimeService();//构建流程变量Map<String, Object> variable = new HashMap<>();variable.put("employee", "张三");variable.put("nrOfHolidays", 3);variable.put("description", "感冒了");//启动流程实例ProcessInstance holidayRequest = runtimeService.startProcessInstanceByKey("test", variable);//流程实例IDSystem.out.println("holidayRequest.getProcessInstanceId() = " + holidayRequest.getProcessInstanceId());System.out.println("holidayRequest.getProcessDefinitionId() = " + holidayRequest.getProcessDefinitionId());System.out.println("holidayRequest.getActivityId() = " + holidayRequest.getActivityId());}/*** 查询代办*/@Testpublic void testQueryTask() {ProcessEngine processEngine = configuration.buildProcessEngine();TaskService taskService = processEngine.getTaskService();TaskQuery taskQuery = taskService.createTaskQuery();List<Task> list = taskQuery.processDefinitionKey("holidayRequest")
//                .taskAssignee("zhangsan").taskDefinitionId("test:1:15004").list();for (Task task : list) {System.out.println("task.getProcessDefinitionId() = " + task.getProcessDefinitionId());System.out.println("task.getName() = " + task.getName());System.out.println("task.getAssignee() = " + task.getAssignee());System.out.println("task.getDescription() = " + task.getDescription());System.out.println("task.getId() = " + task.getId());}}/*** 处理完成当前任务*/@Testpublic void testCompleteTask() {ProcessEngine processEngine = configuration.buildProcessEngine();TaskService taskService = processEngine.getTaskService();Task task = taskService.createTaskQuery().processDefinitionKey("test").taskAssignee("zhangsan").singleResult();//创建流程变量HashMap<String, Object> variables = new HashMap<>();variables.put("approved", false);//完成任务taskService.complete(task.getId(), variables);}/*** 获取流程历史信息*/@Testpublic void testHistory(){ProcessEngine processEngine = configuration.buildProcessEngine();HistoryService historyService = processEngine.getHistoryService();List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId("17501").finished().orderByHistoricActivityInstanceEndTime().asc().list();for (HistoricActivityInstance historicActivityInstance : list) {System.out.println("historicActivityInstance.getActivityId() = " + historicActivityInstance.getActivityId());System.out.println("historicActivityInstance.getActivityName() = " + historicActivityInstance.getActivityName());System.out.println("historicActivityInstance.getTaskId() = " + historicActivityInstance.getTaskId());System.out.println("historicActivityInstance.getAssignee() = " + historicActivityInstance.getAssignee());System.out.println("historicActivityInstance.getDeleteReason() = " + historicActivityInstance.getDeleteReason());System.out.println("处理时间:historicActivityInstance.getDurationInMillis() = " + historicActivityInstance.getDurationInMillis());System.out.println("------------------");}}
}

三、flowable流程图

  • 新建一个xml文件命名为:holiday-request.bpmn20.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"xmlns:flowable="http://flowable.org/bpmn"typeLanguage="http://www.w3.org/2001/XMLSchema"expressionLanguage="http://www.w3.org/1999/XPath"targetNamespace="http://www.flowable.org/processdef"><!--id:流程主键 name:流程名称 --><process id="holidayRequest" name="qingjia" isExecutable="true"><!--startEvent:开始事件--><startEvent id="startEvent"/><!--sequenceFlow顺序流  sourceRef:源  targetRef:目标ID--><sequenceFlow sourceRef="startEvent" targetRef="approveTask"/><!--userTask:用户任务--><userTask id="approveTask" name="tongyi or reject" flowable:assignee="zhangsan"/><sequenceFlow sourceRef="approveTask" targetRef="decision"/><!--exclusiveGateway:排他网关--><exclusiveGateway id="decision"/><sequenceFlow sourceRef="decision" targetRef="externalSystemCall"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${approved}]]></conditionExpression></sequenceFlow><sequenceFlow sourceRef="decision" targetRef="sendRejectionMail"><conditionExpression xsi:type="tFormalExpression"><![CDATA[${!approved}]]></conditionExpression></sequenceFlow><serviceTask id="externalSystemCall" name="Enter holidays in external system"flowable:class="org.flowable.CallExternalSystemDelegate"/><sequenceFlow sourceRef="externalSystemCall" targetRef="holidayApprovedTask"/><userTask id="holidayApprovedTask" name="Holiday approved"/><sequenceFlow sourceRef="holidayApprovedTask" targetRef="approveEnd"/><serviceTask id="sendRejectionMail" name="Send out rejection email"flowable:class="org.flowable.SendRejectionMail"/><sequenceFlow sourceRef="sendRejectionMail" targetRef="rejectEnd"/><endEvent id="approveEnd"/><endEvent id="rejectEnd"/></process></definitions>

以上简单介绍springboot整合flowable,后续会继续深入研究,欢迎各位小伙伴指点不足。

http://www.lryc.cn/news/163640.html

相关文章:

  • 戳泡泡小游戏
  • Redis缓存
  • mysql 插入更新数据
  • 系统架构设计高级技能 · 软件产品线
  • C语言学习系列-->字符函数和字符串函数
  • 尖端AR技术如何在美国革新外科手术实践?
  • 【木板】Python实现-附ChatGPT解析
  • 第一章:绪论
  • C++面试知识点总结
  • 从智能手机到智能机器人:小米品牌的高端化之路
  • 深度学习推荐系统(八)AFM模型及其在Criteo数据集上的应用
  • 【Spring】aop的底层原理
  • 微信小程序开发---基本组件的使用
  • SpringBoot国际化配置组件支持本地配置和数据库配置
  • Shell编程之sort
  • windows docker 容器启动报错:Ports are not available
  • 300. 最长递增子序列
  • DNS(域名解析系统)
  • 解决jsp/html界面跳转servlet出现404错误的方法
  • catface,使用Interface定义Controller,实现基于Http协议的RPC调用
  • Linux:LVS (NAT群集搭建)
  • 音乐格式转换mp3怎么转?跟着步骤操作一遍
  • it监控系统可以电脑吗?有什么效果
  • jvs-智能bi(自助式数据分析)9.1更新内容
  • MyBatis-Plus-扩展操作(3)
  • react 中 antd 的 样式和 tailwind 样式冲突
  • 获取该虚拟机的所有权失败,主机上的某个应用程序正在使用该虚拟机
  • 2024届校招-Java开发笔试题-S4卷
  • 数据分析面试题(2023.09.08)
  • jenkins 报错fatal:could not read Username for ‘XXX‘:No such device or address