栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot集成Activiti7

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot集成Activiti7

导入依赖

    
    
      org.activiti
      activiti-spring-boot-starter
      7.1.0.M6
    

    
    
      commons-io
      commons-io
      2.11.0
    


    
    
      com.alibaba
      druid-spring-boot-starter
      1.2.5
    

    
    
      mysql
      mysql-connector-java
    

    
    
      org.springframework.boot
      spring-boot-starter-security
    

  

创建启动类
平时怎么创就怎么创,没啥特殊的

创建配置文件

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://xxx:xxx/xxx?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
    username: xxx
    password: xxx
    druid:
      max-active: 20
      min-idle: 2
      initial-size: 2
  activiti:
    #1.flase:activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
    #2.true:默认值。activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
    #3.create_drop: fiactiviti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
    #4.drop-create:/iactiviti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
    database-schema-update: true
    #activiti7默认不生成历史信思表,开启历史表
    db-history-used: true
    #记录历史等级可配置的历史级别有none,activity,audit,full
    #none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
    #activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
    #audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit/history的默认值。
    #full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
    history-level: full
    check-process-definitions: true
    # 流程文件默认存放路径classpath*:**/processes/
#    process-definition-location-prefix: classpath*:**/processes/
    # 流程文件默认文件后缀 **.bpmn20.xml", "**.bpmn"
#    process-definition-location-suffixes: **.bpmn20.xml", "**.bpmn"

这里需要注意的是在数据库路径后面要加上&nullCatalogMeansCurrent=true,不然启动又会报错
三步一个坑!!

创建bpmn流程图

没必要搞得像其他帖子一样,翻墙下一个actbpmn插件,或者是下个前端页面来画,在线的bpmn编辑网站一堆啊
以下两个都不错
https://demo.bpmn.io/
https://bpmn.52itstyle.vip/

在线画完直接浏览器下载到本地,还能同时下载svg图


复制到resouces目录下
记得先创建一个processes文件夹,Activiti默认是去这个文件夹里找bpmn文件的

下载来的bpmn文件需要修改一点点地方


id是这个流程的名字,可以认为是唯一标识吧,可以自己修改,也可以就用这个也行

启动项目


一直到最后,如果没有报错,那就是表示万事大吉了
然后去看看数据库

正好多了25张表

流程测试
@SpringBootTest
@Slf4j
public class ActivitiTest {

  @Autowired
  private RuntimeService runtimeService;

  @Autowired
  private TaskService taskService;

  @Autowired
  private RepositoryService repositoryService;

  @Autowired
  private HistoryService historyService;


  
  @Test
  public void testStartProcess(){

    // 开启流程 key填的是流程的表示,与bpmn里的id对应
//    String instanceKey = "myProcess_1";
    String instanceKey = "myLeave";
    log.info("开启请假流程...");
    Map startMap = new HashMap();
    startMap.put("userId", "10001");
    ProcessInstance instance = runtimeService.startProcessInstanceByKey(instanceKey, startMap);
    log.info("启动流程实例成功:{}", instance);
    log.info("流程实例ID:{}", instance.getId());
    log.info("流程定义ID:{}", instance.getProcessDefinitionId());

    // 获取任务信息
    String instanceId = instance.getId(); // 实例id,从上一步获取
    String leaveDays = "10"; // 请假天数
    String leaveReason = "回家睡觉"; // 请假原因
    Task task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult();
    if (task == null) {
      log.info("查询到任务为空!");
    }


    // 提交请假申请
    Map workerMap = new HashMap();
    workerMap.put("days", leaveDays);
    workerMap.put("date", new Date());
    workerMap.put("reason", leaveReason);
    taskService.complete(task.getId(), workerMap);
    log.info("执行【提交请假申请】环节,流程推动到【部门经理审批】环节");

    // 部门经理审批 这里需要更新任务,上一步任务已经执行完了
    task = taskService.createTaskQuery().processInstanceId(instanceId).singleResult();
    String days = (String) taskService.getVariable(task.getId(), "days");
    Date date = (Date) taskService.getVariable(task.getId(), "date");
    String reason = (String) taskService.getVariable(task.getId(), "reason");
    String userId = (String) taskService.getVariable(task.getId(), "userId");
    System.out.println("请假人id:  " + userId);
    System.out.println("请假天数:  " + days);
    System.out.println("请假理由:  " + reason);
    System.out.println("请假日期:  " + date.toString());
    String departmentalOpinion = "批了,不用回来了!";
    Map boosMap = new HashMap();
    boosMap.put("departmentalOpinion", departmentalOpinion);
    taskService.complete(task.getId(), boosMap);
    log.info("请假流程结束");
  }
}
执行结果

当然这里仅仅是简单的例子
简单的通过了
那接下来就是去玩更复杂的例子啦~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785210.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号