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。。。