Activiti工作流原理

Posted dengw125792

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activiti工作流原理相关的知识,希望对你有一定的参考价值。

在计算机的辅助下,能够实现流程的自动化控制,就称为工作流。

通过编码方式设置 flag状态来进行工作流,这种方式的缺点是业务流程变更后,程序不可使用。

Activiti可以是做到业务流程变化后,程序代码不用改变。以不变应万变。

工作原理:

  1.先将流程图画好

  2.将流程图中每个节点的数据读取并放入表中

  3.处理表中的第一条数据,处理并删除

  4.重复步骤3. (直到表中记录完了)

实现这个自动化需要

  1.业务流程图标准,规范统一

  2.业务流程图本质上是一个xml文件,这样就可以存入所需要的数据

  3.读取业务流程图的过程就是解析xml文件的过程

  4.读取业务流程图中的一个节点,就相当于解析xml结构,进一步将数据插入到数据库表中形成一条记录

  5.将所有节点都读取并存入数据库表中

  6.后面只需要读取数据库表中的一条记录,读一条记录相当于读取一个节点

  7.业务流程的推进,后面就转化为读取表中的数据,并且处理数据,结束时这一行数据就可以删除

技术方案大概涉及到:

   xml存流程图数据+dom4j解析+mysql数据库+jdbc CRUD操作

Activiti7会提供25张表作为支撑,进行流程存储控制。

 

开发步骤

  1.整合Activiti 导jar包

  2.实现业务流程建模,使用BPMN实现业务流程图

  3.部署业务流程到Acitiviti

  4.启动流程实例

  5.查询待办任务

  6.处理代办任务

  7.循环6.7.

  8.结束流程

 

开发环境

  jdk 1.8

  mysql 5以上

  web容器 tomcat8.5

  开发工具eclipse或idea

  spring5以上

 

Activiti 下载

    <dependency>

      <groupId>org.activiti</groupId>

      <artifactId>activiti-dependencies</artifactId>

      <version>7.0.0.Betal</version>

      <scope>import</scope>

      <type>pom</type>

    </dependency>

 

BPMN的安装 Eclipse中将官网下载的流程设计器demo版本解压,

将feature的jar包复制到eclipes的安装目录里面的features中,

把plugs幕目录下的拷贝到eclipse中plugs目录里,这样eclipse就支持BPM designer了。

导入成功后就在eclipse中new中就可以看到Activiti下存在Activiti Diagram以及Activiti Project 了。

 

这样就可以新建一个java SE项目在src下new一个Activiti Diagram进行测试了。

在创建bpmn文件后如果想保存图片,在eclipse的preference中的Acticiti节点中的save Action中,

勾选Create process definition image when save the diagram。

 

在IDEA中安装更简单 在File中的setting里面的plugs里面搜索actiBPM然后点击安装即可。

 

Activiti支持的数据库大致有H2,mysql,oracle,postgres,DB2,mssql

 

mysql准备库  create database activiti default character set utf8;

 

准备工作完成后开始创建工程

1 创建maven工程 导包

    <dependency>

      <groupId>org.activiti</groupId>

      <artifactId>activiti-engine</artifactId>

      <version>7.0.0.Betal</version>

    </dependency>

    <dependency>

      <groupId>org.activiti</groupId>

      <artifactId>activiti-spring</artifactId>

      <version>7.0.0.Betal</version>

    </dependency>

    <dependency>

      <groupId>org.activiti</groupId>

      <artifactId>activiti-bpmn-model</artifactId>

      <version>7.0.0.Betal</version>

    </dependency>

    <dependency>

      <groupId>org.activiti</groupId>

      <artifactId>activiti-bpmn-converter</artifactId>

      <version>7.0.0.Betal</version>

    </dependency>

    <dependency>

      <groupId>org.activiti</groupId>

      <artifactId>activiti-json-model</artifactId>

      <version>7.0.0.Betal</version>

    </dependency>

    <dependency>

      <groupId>org.activiti</groupId>

      <artifactId>activiti-bpmn-layout</artifactId>

      <version>7.0.0.Betal</version>

    </dependency>

    <dependency>

      <groupId>org.activiti.cloud</groupId>

      <artifactId>activiti-cloud-servers-api</artifactId>

      <version>7.0.0.Betal</version>

    </dependency>

    <dependency>

      <groupId>mysql</groupId>

      <artifactId>mysql-connector-java</artifactId>

      <version>5.1.40</version>

    </dependency>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>4.12</version>

    </dependency>

    <dependency>

      <groupId>log4j</groupId>

      <artifactId>log4j</artifactId>

      <version>${log4j.version}</version>

    </dependency>

    <dependency>

      <groupId>org.slf4j</groupId>

      <artifactId>slf4j-api</artifactId>

      <version>${slf4j.version}</version>

    </dependency>

    <dependency>

      <groupId>org.slf4j</groupId>

      <artifactId>slf4j-log4j12</artifactId>

      <version>${slf4j.version}</version>

    </dependency>

    <dependency>

      <groupId>org.mybatis</groupId>

      <artifactId>mybatis</artifactId>

      <version>3.4.5</version>

    </dependency>

    <dependency>

      <groupId>commons-dbcp</groupId>

      <artifactId>commons-dbcp</artifactId>

      <version>1.4</version>

    </dependency>

 

2 在resource将日志的配置log4j.properties配置好

  在resource将Activiti的配置acticiti.cfg.xml配置好  dbcp数据源的配置  processEngine的配置单独启用方式

<bean id="dataSource" class="org.apaches.commons.dbcp.BasicDataSource">

  <properties neme="driverClassName" value="com.mysql.jdbc.Driver"/>

  <properties neme="url" value="jdbc:mysql://localhost:3306/activiti"/>

  <properties neme="username" value="root"/>

  <properties neme="password" value="root"/>

<./bean>

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StardaloneProcessEngineConfiguration">

  <properties neme="dataSource" ref="dataSource"/>

  <properties neme="databaseSchemaUpdate" value="true"/>

<./bean>

 

3 测试类中测试自动创建25张表,执行后会生成25张表

public class ActivitiTest{

  @Test

  public void testGeneratorTable(){

    //1.创建ProcessEngineConfiguration对象

    ProcessEngineConfiguration configuration = ProcessEngineConfiguration 

      .createProcessEngineConfigurationFromResource("acticiti.cfg.xml");

    //2.创建ProcessEngine对象

    ProcessEngine processEngine = configuration.bulidProcessEngine ();

  }

}

 

 

 

 

 

 

 

 

 

待续16。。。

以上是关于Activiti工作流原理的主要内容,如果未能解决你的问题,请参考以下文章

activity引擎 MySQL查询不带库名

activiti工作流任务(task)的查询

Activiti工作流学习Activiti工作流与spring集成

activiti工作流怎么通过任务名称查找

工作流activiti eclipse 插件怎么生成bpmn文件

如何在线绘制activiti工作流图