Activiti从0到1
概要:工作流引擎,实现业务表与工作流的分离,便于开发。
技术使用:采用activiti7版本,mysql数据库,Maven、idea2021、Activiti BPMNvisualizer插件,Camunda Modeler流程图设计器。
一、前期准备
1、Activiti BPMN visualizer插件安装
(一)setting的Plugins中搜索并点击installed
(二)在此处可看到创建BPMN文件、或者可以编辑即可
2、Camunda Modeler流程图设计器安装
问题:有了Activiti BPMN visualize为什么还要安装呢?
第一点:idea2021不能兼容常用的actiBPM。
第二点:Activiti BPMN visualize找不到加入监听器的功能(后续讲到)。
第三点:关于 assignee 失效。解决办法:将camunda 替换为 activiti,命名空间改为activity的命名空间,1、加入xmlns:activiti=“http://activiti.org/bpmn”,2、camunda改为activiti
(一)安装路径
链接:https://pan.baidu.com/s/10_W1VpduQXxCSitSKXxM7Q
提取码:6666
下载完成解压即可使用。
(二)idea配置Camunda Modeler
File > setting > Tools > External tool > 点击+号
(三)在此处可看见有新增的工具即可
3、创建项目后进行Maven配置
<!-- activiti 的相关包 mysql的驱动包 mybatis log4j 数据库链接池-->
<properties>
<slf4j.version>1.6.6</slf4j.version>
<log4j.version>1.2.12</log4j.version>
<activiti.version>7.0.0.Beta1</activiti.version>
</properties>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn 模型处理 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn 转换 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn json数据转换 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- bpmn 布局 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- activiti 云支持 -->
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-services-api</artifactId>
<version>${activiti.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.40</version>
</dependency>
<!-- mybatis -->
<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>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- log start -->
<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>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
4、activiti配置文件(activiti.cfg.xml放于resource文件夹下)
<?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">
<!--dbcp链接池-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///activiti?nullCatalogMeansCurrent=true"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="maxActive" value="3"/>
<property name="maxIdle" value="1"/>
</bean>
<!--在默认方式下 bean的id 固定为 processEngineConfiguration-->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!--直接引用上面配置的链接池-->
<property name="dataSource" ref="dataSource"/>
<!--actviti数据库表在生成时的策略
true - 如果数据库中已经存在相应的表,那么直接使用,
如果不存在,那么会创建-->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
</beans>
二、流程图制作
(一)首先创建一个bpmn2.0文件,然后编辑,上述有提到。
(二)右键可创建组件
(三)连线点击右上角的箭头并拖动到其他组件中
(四)创建完毕后可通过Camunda Modeler打开文件
(五)创建一个较为完整的流程图
(六)生成流程图片(方式一)
生成流程图片(方式二)
三、创建activiti表与了解其结构
(一)创建activiti表方式一:
1、使用方法getDefaultProcessEngine
2、默认从resources下读取名字为actviti.cfg.xml的文件
3、创建processEngine时,就会创建mysql的表
//默认方式
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment();
//获取流程引擎对象(此时创建activiti的表)
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
(二)创建activiti表方式二:
配置文件的名字可以自定义,bean的名字也可以自定义
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.
createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration");
//获取流程引擎对象(此时创建activiti的表)
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
(三)了解activiti表结构
- act_hi_*:'hi’表示 history,历史数据。
- act_ge_*:'ge’表示 general,通用数据。
- act_evt_*:'evt’表示 event,事件日志。
- act_procdef_*:'procdef’表示processdefine,流程定义信息。
- act_re_*:'re’表示 repository,静态资源。
- act_ru_*:'ru’表示 runtime,表示运行时数据。
通用数据表:(ge)
表名
说明
act_ge_bytearray
存储通用的流程定义和流程资源
act_ge_bytearray
存储整个流程引擎级别的数据
流程定义表:(re)
表名
说明
act_re_model
流程设计模型部署数据
act_re_deployment
部署信息数据表
act_re_procdef
流程定义数据
运行实例表:(ru)
表名
说明
act_ru_deadletter_job
作业失败超过重试次数部署数据
act_ru_event_subscr
运行时事件数据
act_ru_execution
运行时流程执行实例数据
act_ru_identitylink
运行时用户信息数据
act_ru_integration
运行时积分数据
act_ru_suspended_job
运行时作业暂停数据
act_ru_task
运行时任务信息数据
act_ru_timer_job
运行时定时器作业表
act_ru_variable
运行时变量信息表
act_ru_job
运行时作业信息数据
历史流程表:(hi)
表名
说明
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_evt_log
通用事件日志记录数据
act_procdef_info
流程定义的动态变更信息数据