activiti基础知识点

自我驱动力的来源是刚需。

前段时间从另外一个团队手里接过来一个半成品项目,是一个工作流系统。半成品就算了,还要快速完成工作任务,说多了都是泪,算是接了一个大锅。为了快速上手Activiti工作流的使用,基本上是边学习变实践,因此整个项目做下来对工作流知识依然处于比较散乱的阶段,趁着项目暂时告一段落把知识梳理下。言归正传,下面进入正题:

1、基本概念

  • 工作流:业务过程的部分或整体在计算机应用环境下的自动化
  • 工作流管理系统:工作流的定义和管理,按照在系统中预定义好的工作流规则进行工作流实例的执行。
  • 工作流管理系统的目标:管理工作流程以确保工作在正确的时间被期望的人员执行–在自动化进行的业务过程中插入人工的执行和干预。

Activiy是什么

Activiti是一个针对企业用户、开发人员、系统管理员的轻量级工作流业务管理平台,其核心是使用Java开发的快速、稳定的BPMN2.0流程引擎。

Activiti的特点

  • 数据持久化,底层使用MyBatis
  • 引擎Service接口
  • 流程设计器
  • 原生支持Spring
  • 分离运行时与历史数据

2、核心表介绍

2.1 理解数据库表的命名

Activiti的表都以ACT_开头。第二部分表示表的用途的两个字母标识。用途也和服务的API对应。

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

2.2 表用途介绍

通用数据表:

ACT_GE_BYTEARRAY: 存储部署流程的二进制数据,一个流程包括一个工作流信息和一张对应的工作流图片。
ACT_GE_PROPERTY: 存储整个流程引擎级别的数据,用于部署流程时获取新的版本号,初始化表结构时,会默认插入三条记录

历史数据库表:

ACT_HI_ACTINST: 存储历史活动节点数据
ACT_HI_ATTACHMENT: 存储历史附件数据
ACT_HI_COMMENT: 存储历史评论数据或者事件数据
ACT_HI_DETAIL: 存储历史流程变量详情信息
ACT_HI_IDENTITYLINK: 存储历史流程人员操作信息
ACT_HI_PROCINST: 存储历史流程实例信息
ACT_HI_TASKINST: 存储历史任务实例信息
ACT_HI_VARINST: 存储历史流程变量信息

用户组织表:

ACT_ID_GROUP: 存储用户组信息
ACT_ID_INFO: 存储用户扩展信息
ACT_ID_MEMBERSHIP: 存储用户与用户组队形信息
ACT_ID_USER: 存储用户信息

工作流流程规则表:

ACT_RE_DEPLOYMENT: 存储工作流部署信息,比如工作流名称等
ACT_RE_MODEL: 存储流程设计模型信息
ACT_RE_PROCDEF: 存储流程定义数据

运行时数据表:

ACT_RU_EVENT_SUBSCR: 如果流程到达某个事件节点,Activiti会往该表中加入事件描述数据,这些事件描述数据将会决定流程事件的触发。
ACT_RU_EXECUTION: 存储运行时流程执行实例信息
ACT_RU_IDENTITYLINK: 存储运行时流程人员操作信息,主要存储任务节点与参与者的相关信息
ACT_RU_JOB: 存储运行时定时任务信息
ACT_RU_TASK: 存储运行时任务节点信息
ACT_RU_VARIABLE: 存储运行时流程变量信息

其他:

CT_EVT_LOG: 存储事件日志信息
ACT_PROCDEF_INFO: 存储流程定义的动态变更信息

3、核心概念介绍

3.1 核心API

  • ProcessEngine: 在Activiti中最核心的类
  • ProcessDefinition: 流程定义类。可以从这里获得资源文件等。
  • ProcessInstance: 代表流程定义的执行实例,一个流程实例包括了所有的运行节点。我们可以利用这个对象来了解当前流程实例的进度
    等信息,一个流程实例就表示一个流程从刚开始到结束的最大流程分支,即一个流程中流程实例只有一个。
  • Execution: Activiti用这个对象去描述流程执行的每一个节点。在没有并发的条件下,Execution就是同ProcessInstance。流程按照流程定义的规则执行一次的过程,就可以表示执行对象Execution。

    • 一个流程中,执行对象可以存在多个,但是流程实例只能有一个。
    • 当流程按照规则只执行一次的时候,那么流程实例就是执行对象。
  • Task: 执行到某任务环节时生成的任务信息。 由于数据库中保存着历史信息以及正在运行的流程实例信息,在实际项目中对已完成任务的查看频率远不及对代办和可接任务的查看,所以在activiti采用分开管理,把正在运行的交给RuntimeService、TaskService管理,而历史数据交给HistoryService来管理。

  • 流程变量: 在流程执行或者任务执行的过程中,用于设置和获取变量,使用流程变量在流程传递的过程中传递业务参数。

Activit 核心Api关系

3.2 七大Service接口

  • RepositoryService: 仓库服务类,管理流程定义。用于管理流程仓库,例如部署、删除、读取流程资源。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。
  • IdentifyService: 身份Service,用户管理和查询用户、组之间的关系
  • RuntimeService: 流程执行服务类,可以从这个服务类中获取很多关于流程执行相关的信息。
  • TaskService: 任务服务类,可以从这个类中获取任务的信息。
  • FormService: 表单Servcie,用于读取流程、任务相关的表单数据。
  • HistoryService: 查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,例如流程实例、任务、活动、变量、附件。
  • ManagementService引擎管理Service,和具体业务无关,主要可以查询引擎配置、数据库、作业等。

学习知识最好先对基础的概念有个初步的认识,这方便在后续的学习过程中更好的理解这些概念。在对Activiti有了初步的印象后,下面通过在使用的过程中进一步熟悉Activiti工作流。

4、开始使用

Activiti默认使用自带的H2内存数据库,而实际生产环境中使用Oracle或mysql居多,这里配置为oracle数据库。

4.1 在项目里引入相关jar

这里将Spring集成包也引入进来了,这是生产环境常用的使用方式。不需要的可以将activiti-spring引用包去掉。

<dependency>
   <groupId>org.activiti</groupId>
   <artifactId>activiti-engine</artifactId>
   <version>5.22.0</version>
</dependency>
<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.6</version>
</dependency>

4.2 安装Activiti数据库

Activiti框架拥有自动建表功能,在创建流程引擎对象的时候会在数据库中自动创建表。

4.2.1 不使用配置文件

测试代码:

public void intiProcessEngine() {
     // 获取流程引擎
     ProcessEngine processEngine = new StandaloneProcessEngineConfiguration()
               .setJdbcUrl("jdbc:oracle:thin:@172.16.58.17:1521:orcl")
               .setJdbcUsername("activiti")
               .setJdbcPassword("111111")
               .setJdbcDriver("oracle.jdbc.driver.OracleDriver")
               .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
               .buildProcessEngine();
 }
4.2.2 使用activiti.cfg.xml配置文件

classpath下创建activiti.cfg.xml配置文件(名称随意,只要能访问到即可),内容如下:

<?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:context="http://www.springframework.org/schema/context"
 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee"
 xmlns:aop="http://www.springframework.org/schema/aop"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
      http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

 <!-- 配置流程引擎配置对象 -->
 <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
   <property name="jdbcUrl" value="jdbc:oracle:thin:@172.16.58.17:1521:orcl"/>
   <property name="jdbcDriver" value="oracle.jdbc.driver.OracleDriver" />
   <property name="jdbcUsername" value="activiti" />
   <property name="jdbcPassword" value="111111" />
   <property name="databaseSchemaUpdate" value="true" />
   <property name="jobExecutorActivate" value="false" />
 </bean>

 <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
   <property name="processEngineConfiguration" ref="processEngineConfiguration" />
 </bean>

 <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
 <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
 <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
 <bean id="formService" factory-bean="processEngine" factory-method="getFormService" />
 <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
 <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
 <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" />
</beans>

测试代码:

public void intiProcessEngine() {
   // 获取流程引擎
   ProcessEngineConfiguration pec = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");
   processEngine =  pec.buildProcessEngine();
}
4.2.3 使用默认配置文件配置文件

要求配置文件名称必须为activiti-context.xml或者activiti.cfg.xml因为,因为默认的配置ProcessEngines.getDefaultProcessEngine();会初始化这两个文件的其中一个.

测试代码:

public void intiProcessEngine() {
    ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
}

4.3 开发环境搭建|Eclipse插件安装

安装成功后,打开菜单Preferences->Activiti->Save Action,勾选流程图片的生成方式为当保存流程设计图时
Activiti Eclipse插件配置

猜你喜欢

转载自blog.csdn.net/hzygcs/article/details/78284328