activiti工作流学习

1.基本概念
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1)、eclipse装activiti流程设计的插件;

在这里插入图片描述
把这两个复制到eclipse的安装目录(右键eclipse图标,选中“打开此文件的安装位置”);重启eclipse;
在这里插入图片描述
2)、测试
1)、导包
导入流程框架的包,和数据库的包

<!--测试activiti -->
    <dependencies>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>5.22.0</version>
        </dependency>
        <!-- 导入mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.42</version>
        </dependency>
    </dependencies>

2)、写配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--  注意点:
    id="processEngineConfiguration";id必须叫这个名字
    -->
    <!-- 流程引擎的配置信息:
    ProcessEngine:
    流程引擎可以得到7个service组件
     -->
    <bean id="processEngineConfiguration"
        class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_db" />
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="123456" />

        <!-- 数据库模式:更新;
        第一次运行:创建各个表
        以后运行:修改表;
         -->
        <property name="databaseSchemaUpdate" value="true" />

        <property name="jobExecutorActivate" value="false" />
        <property name="asyncExecutorEnabled" value="true" />
        <property name="asyncExecutorActivate" value="false" />
    </bean>

</beans>

3)、测试

package com.atguigu.activiti.test;

import static org.junit.Assert.*;

import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.junit.Before;
import org.junit.Test;

public class ActivitiTest {

    // 引擎只有一个即可
    // 在类路径下找一个activiti.cfg.xml的配置文件来初始化流程引擎
    //服务组件和流程引擎都是接口;
    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
    TaskService taskService;
    RuntimeService runtimeService;
    RepositoryService repositoryService;
    ManagementService managementService;
    IdentityService identityService;
    HistoryService historyService;
    FormService formService;

    @Before
    public void serviceInit() {
        // 任务服务组件:完成任务,签收任务等...
        taskService = processEngine.getTaskService();
        // 运行时服务组件:查询流程运行期间一些信息,控制流程等
        runtimeService = processEngine.getRuntimeService();

        // 持久化服务组件:负责保存流程定义信息等
        repositoryService = processEngine.getRepositoryService();

        // 管理组件,监听流程、定时任务等...
        managementService = processEngine.getManagementService();
        // 用户模块组件,CRUD一些用户以及用户分组等信息
        identityService = processEngine.getIdentityService();
        // 查询流程历史记录等信息;历史组件
        historyService = processEngine.getHistoryService();
        // 表单组件:没用
        formService = processEngine.getFormService();
    }

    @Test
    public void test() {

          System.out.println("流程引擎:"+processEngine);
          System.out.println("其他组件:");
    }

}

1、流程框架第一次(启动)给数据库中建表,这个表有数据;(存储当前activiti版本信息等)
在这里插入图片描述
在这里插入图片描述

4、在文件的空白处(画bpmn图(流程图)的时候)点一下;在properties标签中可以填写当前流程的一些定义(介绍)信息
在这里插入图片描述
5、画流程图:
在这里插入图片描述
6、部署流程

 @Test
    public void testProcessDefinetionDeployee() {
        // 1、如何定义一个流程;(画流程图);
        // 2、部署这个定义好的流程;
        // 3、部署:去数据库保存这个流程定义的信息
        Deployment deploy = repositoryService.createDeployment()
            .addClasspathResource("process/请假流程.bpmn")
            .deploy();

        System.out.println("部署的流程deploy对象"+deploy);
    }

一些通用信息;保存了流程的文件、流程图等信息![在这里插入图片描述](https://img-blog.csdnimg.cn/2018110517235813.png)
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
流程定义:ProcessDefinetion;流程信息保存;
在这里插入图片描述
流程实例:启动某个流程就是为这个流程创建一个流程实例;运行期间的数据都在ru表中
在这里插入图片描述
act_ru_event_ 流程期间的事件处理;
act_ru_execution_:流程的运行信息
在这里插入图片描述
act_ru_identitylink:和用户有关
在这里插入图片描述
ru_job:其他任务;
ru_task:用户要完成的任务;
在这里插入图片描述
ru_variable:流程变量;流程运行期间要用的数据;
解析:claim()方法是让某个人来领取该task(任务)
在这里插入图片描述
完成某任务:
在这里插入图片描述
在这里插入图片描述
1)、员工申请:指派人:动态取的
在这里插入图片描述
2、任务的签收和完成;
在这里插入图片描述
2)、网关;判断走分支;
1)、排他网关
else if();只会有一个分支到达;
在这里插入图片描述
在这里插入图片描述
2)、并行网关:
必须等待所有的分支都完成,汇聚任务才能完成,自动进行下一步;

 /**
     * 并行网关,必须所有汇聚点的分支都完成才可以
     * @Description (TODO这里用一句话描述这个方法的作用)
     */
    @Test
    // gov-process:1:87504
    public void test04() {
        List<Task> list = taskService.createTaskQuery().processDefinitionId("gov-process:1:87504").list();
        int i = 0;
        for (Task task : list) {
            System.out.println("任务信息:" + task.getId() + ";任务名:" + task.getName());
            // 完成任务
            taskService.complete(task.getId());
            //if ((i++) % 2 == 0) {
                // System.out.println("当前要完成的任务。"+task.getId() + ";任务名:" + task.getName());
                // taskService.complete(task.getId());
            //}
        }

//        List<HistoricProcessInstance> list2 = historyService.createHistoricProcessInstanceQuery().finished().list();
//        for (HistoricProcessInstance historicProcessInstance : list2) {
//            System.out.println(historicProcessInstance);
//        }
        //看这个流程是否完成了;
        long count = historyService.createHistoricProcessInstanceQuery().processDefinitionId("gov-process:1:87504").finished().count();
        System.out.println(count);
    }

并行网管的图标是“+”号,排它网关的图标是“×”号
在这里插入图片描述
3)、包含网关;(并行+排他);
在这里插入图片描述
并行:满足并行条件的分支走;
包含:
满足走的就走;并行
还可以排他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java全栈研发大联盟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值