Activiti工作流
1. Activiti简介
Activiti是一个开源的工作流引擎和业务流程管理(BPM)平台,基于Java开发,遵循BPMN 2.0规范(业务流程建模与标记法)。它允许开发人员创建、部署和管理业务流程,实现业务流程自动化。Activiti具有轻量级、高性能、易于扩展等特点,广泛应用于企业级应用系统中。
1.1 Activiti的主要特点
- 开源免费:Apache许可证下发布,可以在商业项目中自由使用
- 轻量级:核心引擎小于2MB,启动快速,占用资源少
- 符合标准:完全支持BPMN 2.0标准
- 易于嵌入:可以轻松嵌入到Java应用中
- 支持多种数据库:MySQL、Oracle、PostgreSQL、H2等
- 支持事务管理:与Spring事务管理集成良好
- 历史数据管理:提供全面的历史数据记录功能
- 可视化设计工具:提供流程设计器,支持可视化建模
2. Activiti核心概念
2.1 BPMN 2.0
BPMN(Business Process Model and Notation)是一种图形化的表示法,用于定义业务流程模型。Activiti完全实现了BPMN 2.0规范,支持各种流程元素:
- 事件(Events):开始事件、结束事件、中间事件等
- 活动(Activities):任务、子流程等
- 网关(Gateways):排他网关、并行网关、包容网关等
- 连线(Sequence Flows):定义活动的执行顺序
- 泳道(Swimlanes):用于组织和分类活动
2.2 Activiti核心组件
Activiti的核心架构包括以下几个主要组件:
- ProcessEngine(流程引擎):Activiti的核心组件,负责流程的部署、执行和管理
- RepositoryService(仓库服务):管理流程定义和流程部署
- RuntimeService(运行时服务):管理流程实例和执行流程
- TaskService(任务服务):管理和查询用户任务
- HistoryService(历史服务):查询历史数据
- IdentityService(身份服务):管理用户和用户组
- FormService(表单服务):处理与表单相关的功能
- ManagementService(管理服务):执行数据库维护操作
3. Activiti环境搭建
3.1 Maven依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
3.2 配置文件
3.2.1 activiti.cfg.xml(独立使用)
<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">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?characterEncoding=UTF-8" />
<property name="jdbcDriver" value="com.mysql.cj.jdbc.Driver" />
<property name="jdbcUsername" value="root" />
<property name="jdbcPassword" value="password" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
</beans>
3.2.2 Spring集成配置
<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"
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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 数据源配置 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/activiti?characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="password" />
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
&