activiti学习笔记

前言

项目中要使用activiti工作流引擎,虽说两年前第一份工作接触到了工作流的内容,然而在两年后我还是对activiti这种技术望洋兴叹。也是为了弥补之前的遗憾,所以就对activiti进行了一些了解。

activiti学习

原理

activiti把流程相关的数据存储到自定义的一些表中。activiti使用的大概步骤时:定义bpmn流程图->部署流程图->开启流程->完成任务。开启流程后,流程会自动推进,直到遇到阻塞,比如用户任务UserTask,那么这是一个待完成的任务,需要某个执行人去执行该任务,任务完成后,流程推进到下一个阻塞任务,直到结束。

概念

ProcessEngine这个类主要用来获取服务,如RepositoryService/RuntimeService/TaskService等,关于流程的操作主要是在这些service上进行的。

activiti的表
ACT_RE:静态资源,比如流程图文件,流程定义等
ACT_GE:通用数据
ACT_HI:运行的历史数据,比如执行过的任务等
ACT_RU:运行时的表,比如流程实例、任务等

act_hi_taskinst  --> 完成任务时,新增一条下一节点的记录,同时当前节点的结束时间补全,下一节点的结束时间为空
act_ru_task --> 完成任务时,删除当前流程节点的记录,同时新增下一流程节点的记录;
定义bpmn流程图

本人使用的是idea,通过画图插件actiBpm去画流程图,不表。

部署流程图
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 默认会找到resources/activiti.cfg.xml配置文件
Deployment deployment = processEngine.getRepositoryService()
                .createDeployment()
                .addClasspathResource("测试.bpmn")
                .deploy();
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

    <!--自己本地的数据库-->
    <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3308/activiti201211?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF8&amp;serverTimezone=GMT" />
        <property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="root" />
        <property name="databaseSchemaUpdate" value="true" />
    </bean>
</beans>
开启流程
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 第一个参数传递流程定义的key,第二个参数是businessKey,这个随便定义,按照业务来
processEngine.getRuntimeService().startProcessInstanceByKey("testKey", "leaveMeAlone");
完成任务
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
Task task = processEngine.getTaskService().createTaskQuery().processDefinitionKey("testKey").singleResult();
if (task != null) {
    processEngine.getTaskService().setAssignee(task.getId(), "张伯伦"); // 设置处理人
    Map<String,Integer> map = new HashMap<String, Integer>();
    map.put("day", 4); // 传递参数
    processEngine.getTaskService().setVariables(task.getId(), map);
    processEngine.getTaskService().complete(task.getId()); // 完成任务
}

总结

activiti概念比较多,写一个小demo可很好的理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值