一、工作流简述

工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。

工作流就是通过计算机技术对业务流程进行自动化管理。实现多个参与者按照预定的流程去自动执行业务流程。

工作流管理系统的目标:管理工作的流程以确保工作在正确的时间被期望的人员所执行——在自动化进行的业务过程中插入人工的执行和干预。

常见的工作流框架:

Activiti5.13、JBPM4.4、OSWorkFlow、WorkFlow......

工作流框架底层需要有数据库提供支持,activiti5.13版本,有23张表,activiti5.22有25张表。JBPM4.4框架底层有数据库支持,18张表。JBPM底层使用hibernate操作数据库。Activiti框架底层使用的mybatis操作数据库

Activiti是Apache下的开源BPM平台。

二、重要名词解释

①工作流引擎

ProcessEngine对象,这是Activiti工作的核心。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。

②BPM

BPM,即业务流程管理,是一种以规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法,常见商业管理教育如EMBA、MBA等均将BPM包含在内。

③BPMN

BPMN:业务流程建模与标注,包括这些图如何组合成一个业务流程图(Business Process Diagram);讨论BPMN的各种的用途,包括以何种精度来影响一个流程图中的模型;BPMN作为一个标准的价值,以及BPMN未来发展的远景。

④流对象:一个业务流程图有三个流对象的核心元素

Ⅰ.事件

一个事件用圆圈来描述,表示一个业务流程期间发生的东西。事件影响流程的流动,一般有一个原因(触发器)或一个影响(结果)。基于它们对流程的影响,有三种事件:开始,中间以及终止事件

oa java 工作流 java activity工作流_oa java 工作流

Ⅱ.活动

用圆角矩形表示,一个流程由一个活动或多个活动组成

oa java 工作流 java activity工作流_spring_02

Ⅲ.条件

条件用熟悉的菱形表示,用于控制序列流的分支与合并。另外,它还可以作为传统的选择,还包括路径的分支与合并。其内部的标记会给出控制流的类型。

oa java 工作流 java activity工作流_xml_03

Activiti使用Bpmn2.0标准进行流程定义(流程建模),bpmn采用xml描述 。

如何使用bpmn进行流程建模:

通常情况下,使用建模工具进行流程图绘制,生成一个图形,通过工具查看bpmn的xml描述 。

如果熟练,手动编写pbmn的xml文档。(对坐标和结点的大小通过工具完成)

三、环境搭建

pom.xml:

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-engine</artifactId>
      <version>5.22.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring -->
    <dependency>
      <groupId>org.activiti</groupId>
      <artifactId>activiti-spring</artifactId>
      <version>5.22.0</version>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.25</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-jdk14 -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.7.25</version>
      <scope>test</scope>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.codehaus.groovy/groovy-all -->
    <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>2.4.14</version>
    </dependency>
    <!-- 单元测试 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.24</version>
    </dependency>


</dependencies>

搭建好之后,就应该创建Activiti的数据库,可以选择去Activiti官网下载,Activiti也有类似Hibernate自动建表的方法,需要建立配置文件,文件名必须为:为activiti-context.xml或者activiti.cfg.xml,

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context-2.5.xsd
						http://www.springframework.org/schema/tx
						http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    <!-- 配置流程引擎配置对象 -->
    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUrl" value="jdbc:mysql:///activitidb" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="1234" />
        <property name="databaseSchemaUpdate" value="true" />
    </bean>

    <!-- 配置一个流程引擎工厂bean,用于创建流程引擎对象 -->
    <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
        <!-- 通过set方法注入流程引擎配置对象 -->
        <property name="processEngineConfiguration" ref="processEngineConfiguration" />
    </bean>

</beans>

接下来进行测试就可以建表,测试主要是获得到核心引擎就可以自动建表:

package com.little.Test01;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.junit.Test;

public class createActivitiTable {
    @Test
    public void createTable(){
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        System.out.println(processEngine);
    }

}

测试完成,就可以看见数据库中多了25张空表:

oa java 工作流 java activity工作流_spring_04

Activiti表说明:

概括几个常用的表

Activiti的后台是有数据库的支持,所有的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应

  • ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。
  • ACT_RU_*: 'RU'表示runtime。 这些运行时的表,包含流程实例,任务,变量,异步任务,等运行中的数据。 Activiti只在流程实例执行过程中保存这些数据, 在流程结束时就会删除这些记录。 这样运行时表可以一直很小速度很快。
  • ACT_ID_*: 'ID'表示identity。 这些表包含身份信息,比如用户,组等等。
  • ACT_HI_*: 'HI'表示history。 这些表包含历史数据,比如历史流程实例, 变量,任务等等。
  • ACT_GE_*: 通用数据, 用于不同场景下。
  • 流程部署相关表

act_re_deployement 部署对象表

act_rep_procdef  流程定义表

act_ge_bytearray 资源文件表

act_ge_prperty  主键生成策略表(对于部署对象表的主键ID)

  • 流程实例相关表

act_ru_execution 正在执行的执行对象表(包含执行对象ID和流程实例ID,如果有多个线程可能流程实例ID不一样)

act_hi_procinst 流程实例历史表

act_hi_actinst 存放历史所有完成的任务

  • Task 任务相关表

act_ru_task 代办任务表 (只对应节点是UserTask的)

act_hi_taskinst 代办任务历史表 (只对应节点是UserTask的)

act_hi_actinst  所有节点活动历史表 (对应流程的所有节点的活动历史,从开始节点一直到结束节点中间的所有节点的活动都会被记录)

  • 流程变量表

act_ru_variable 正在执行的流程变量表

act_hi_variable 流程变量历史表