Skip to content

Commit b1e8a94

Browse files
committed
docs:新增工作流专栏
1 parent 5199d2e commit b1e8a94

File tree

4 files changed

+371
-1
lines changed

4 files changed

+371
-1
lines changed

.vscode/.server-controller-port.log

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
22
"port": 9145,
3-
"time": 1729093610425,
3+
"time": 1730783258540,
44
"version": "0.0.3"
55
}

docs/.vuepress/config.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,14 @@ module.exports = {
345345
}, ]
346346
},
347347

348+
{
349+
text: '工作流引擎',
350+
items: [{
351+
text: '00-Activiti7',
352+
link: '/md/activiti/activiti7-introduction.md'
353+
}, ]
354+
},
355+
348356
{
349357
text: 'MQTT',
350358
items: [{
@@ -1184,6 +1192,15 @@ module.exports = {
11841192
"07-MQTT发布订阅模式介绍"
11851193
]
11861194
}],
1195+
1196+
"/md/activiti/": [{
1197+
title: "Activiti7",
1198+
collapsable: false,
1199+
sidebarDepth: 0,
1200+
children: [
1201+
"activiti7-introduction",
1202+
]
1203+
}],
11871204

11881205
"/md/spider/": [{
11891206
title: "爬虫",
@@ -2185,6 +2202,7 @@ module.exports = {
21852202
"架构之美:教你如何分析一个接口?",
21862203
"业务代码如何才能不再写出大串的if else?",
21872204
"阿里P8架构师都是怎么分析软件模型的?",
2205+
"evolution-software-architecture-mainframes-to-distributed-computing",
21882206
"cell-based-architecture-distributed-systems",
21892207
"cell-based-architecture-resilient-fault-tolerant-systems",
21902208
]
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
# 02-Activiti7简介
2+
3+
## 0 前言
4+
5+
在现代企业应用开发中,工作流自动化已成为提升效率和降低复杂度的核心组件。作为一款开源的 Java 工作流引擎,Activiti7 提供了一个强大的工具集,帮助开发人员快速实现流程管理和业务流程自动化。本文将为 Java 技术专家提供 Activiti7 的入门指南,帮助您快速理解其架构、特性及基本使用方法。
6+
7+
## 1 为什么选择 Activiti7?
8+
9+
基于 Java 的轻量级工作流引擎,支持 BPMN 2.0 标准,能灵活集成到不同 Java 应用。
10+
11+
### 优势
12+
13+
- **开源和社区活跃**:Activiti 是一个由社区支持的开源项目,拥有庞大的用户群体和丰富的学习资源。
14+
- **轻量级和可嵌入**:Activiti7 可以轻松嵌入到任何 Java 应用中,特别适用于微服务架构。
15+
- **支持 BPMN 2.0**:Activiti7 完全兼容 BPMN 2.0 标准,能够实现复杂的业务流程设计。
16+
- **RESTful API 支持**:Activiti7 提供了丰富的 REST API,便于与其他系统集成。
17+
- 与 springboot 更好的原生支持
18+
- 引入SpringSecurity作为默认用户与角色的默认安全机制
19+
20+
项目前主管Tom Baeyens,2010年立项,前身是 GBPM5,所以初始版本就是 5。
21+
22+
## 2 Activiti7 核心组件
23+
24+
在使用 Activiti7 之前,了解其核心组件有助于更好地理解其工作原理。以下是 Activiti7 的主要模块:
25+
26+
- **流程引擎(Process Engine)**:Activiti 的核心组件,负责管理流程的执行和状态。
27+
- **流程定义(Process Definition)**:通过 BPMN 文件定义业务流程,描述任务、网关和事件的流程图。
28+
- **任务管理(Task Management)**:用于管理和分配用户任务,可与用户表单和界面进行集成。
29+
- **历史数据(History)**:记录流程实例的历史数据,便于审计和回溯。
30+
- **REST API**:提供标准化的 API 接口,用于与外部系统交互。
31+
32+
### ProcessEngine
33+
34+
- RepositoryService
35+
- RuntimeService
36+
- ManagementService
37+
- IdentityService
38+
- TaskService
39+
- HistoryService
40+
41+
对应:
42+
43+
- ProcessRuntime
44+
- TaskRuntime
45+
46+
ProcessEngine 是整个系统的核心,它负责管理和协调各种服务,以实现业务流程的自动化。
47+
48+
- **RepositoryService:** 负责管理流程定义(BPMN模型等)。
49+
- **RuntimeService:** 负责执行流程实例,包括启动、暂停、终止等操作。
50+
- **ManagementService:** 提供对流程引擎的管理功能,比如部署流程定义、查询流程实例等。
51+
- **IdentityService:** 管理用户和组。
52+
- **TaskService:** 管理任务,包括分配任务、完成任务等。
53+
- **HistoryService:** 存储流程的历史数据,用于审计和分析。
54+
55+
**ProcessRuntime 和 TaskRuntime** 作为 ProcessEngine 的两个重要的运行时组件,分别负责流程实例和任务的执行。
56+
57+
- **BPMN:** 业务流程建模符号,用于定义流程。
58+
59+
## 工作流常见业务场景介绍
60+
61+
### 线性审批
62+
63+
64+
65+
![](/Users/javaedge/Downloads/IDEAProjects/java-edge-master/assets/image-20241105151142813.png)
66+
67+
简单的当然 ifelse 最省事。
68+
69+
### 会签审批
70+
71+
如发布公文:
72+
73+
![](/Users/javaedge/Downloads/IDEAProjects/java-edge-master/assets/image-20241105151352702.png)
74+
75+
### 条件流程
76+
77+
78+
79+
![](/Users/javaedge/Downloads/IDEAProjects/java-edge-master/assets/image-20241105151418858.png)
80+
81+
## 3 Activiti7 基本使用
82+
83+
以下将展示如何在 Java 项目中集成 Activiti7 并完成一个简单的工作流示例。
84+
85+
### 3.1 添加 Maven 依赖
86+
87+
为项目添加 Activiti7 依赖:
88+
89+
```xml
90+
<dependency>
91+
<groupId>org.activiti</groupId>
92+
<artifactId>activiti-engine</artifactId>
93+
<version>7.x.x</version>
94+
</dependency>
95+
```
96+
97+
### 3.2 配置流程引擎
98+
99+
创建一个 `ProcessEngineConfiguration` 实例来初始化流程引擎:
100+
101+
```java
102+
import org.activiti.engine.ProcessEngine;
103+
import org.activiti.engine.ProcessEngineConfiguration;
104+
105+
public class ActivitiConfig {
106+
public static ProcessEngine buildProcessEngine() {
107+
ProcessEngineConfiguration config = ProcessEngineConfiguration
108+
.createStandaloneInMemProcessEngineConfiguration();
109+
config.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
110+
config.setJdbcUrl("jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000");
111+
config.setJdbcDriver("org.h2.Driver");
112+
config.setJdbcUsername("sa");
113+
config.setJdbcPassword("");
114+
return config.buildProcessEngine();
115+
}
116+
}
117+
```
118+
119+
上面的代码创建了一个内存数据库中的流程引擎配置,这在开发和测试阶段非常便捷。
120+
121+
### 3.3 定义 BPMN 流程
122+
123+
`resources` 文件夹下创建一个 `process.bpmn20.xml` 文件,定义一个简单的流程:
124+
125+
```xml
126+
<?xml version="1.0" encoding="UTF-8"?>
127+
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" targetNamespace="Examples">
128+
<process id="sampleProcess" name="Sample Process" isExecutable="true">
129+
<startEvent id="startEvent" name="Start" />
130+
<sequenceFlow sourceRef="startEvent" targetRef="userTask" />
131+
<userTask id="userTask" name="User Task" />
132+
<sequenceFlow sourceRef="userTask" targetRef="endEvent" />
133+
<endEvent id="endEvent" name="End" />
134+
</process>
135+
</definitions>
136+
```
137+
138+
该流程包含一个开始事件、一个用户任务和一个结束事件。
139+
140+
### 3.4 部署并启动流程
141+
142+
```java
143+
import org.activiti.engine.RepositoryService;
144+
import org.activiti.engine.RuntimeService;
145+
import org.activiti.engine.repository.Deployment;
146+
import org.activiti.engine.runtime.ProcessInstance;
147+
148+
public class ProcessStarter {
149+
public static void main(String[] args) {
150+
ProcessEngine engine = ActivitiConfig.buildProcessEngine();
151+
RepositoryService repositoryService = engine.getRepositoryService();
152+
153+
// 部署流程定义
154+
Deployment deployment = repositoryService.createDeployment()
155+
.addClasspathResource("process.bpmn20.xml")
156+
.deploy();
157+
158+
// 启动流程实例
159+
RuntimeService runtimeService = engine.getRuntimeService();
160+
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("sampleProcess");
161+
System.out.println("Process started with ID: " + processInstance.getId());
162+
}
163+
}
164+
```
165+
166+
运行此代码将会部署流程定义,并启动一个新的流程实例。
167+
168+
### 3.5 管理任务
169+
170+
流程实例启动后,您可以通过 `TaskService` 管理流程中的任务:
171+
172+
```java
173+
import org.activiti.engine.TaskService;
174+
import org.activiti.engine.task.Task;
175+
176+
public class TaskManager {
177+
public static void main(String[] args) {
178+
ProcessEngine engine = ActivitiConfig.buildProcessEngine();
179+
TaskService taskService = engine.getTaskService();
180+
181+
// 获取并完成用户任务
182+
Task task = taskService.createTaskQuery().singleResult();
183+
if (task != null) {
184+
System.out.println("Completing Task: " + task.getName());
185+
taskService.complete(task.getId());
186+
}
187+
}
188+
}
189+
```
190+
191+
运行后可以看到用户任务被完成,流程将继续向结束事件推进。
192+
193+
## 4 常见问题及解决方案
194+
195+
1. **数据库连接问题**:确保正确配置数据库连接,建议在开发时使用 H2 内存数据库,生产环境切换到 MySQL 或其他数据库。
196+
2. **流程定义更新**:如果流程定义发生更改,需重新部署流程定义,Activiti 支持版本管理。
197+
3. **任务分配**:可以通过设置 `assignee` 属性来分配任务给特定用户。
198+
199+
## 5 总结
200+
201+
Activiti7 是一个强大且灵活的工作流引擎,适合 Java 技术专家在各种业务场景中实现流程自动化。通过本指南,您应当对 Activiti7 的基本架构和使用方法有了初步的认识。希望这篇入门博客可以帮助您快速上手 Activiti7,并在实际项目中应用流程管理和自动化的强大功能。
202+
203+
参考:
204+
205+
- [Activiti 官方文档](https://www.activiti.org/)
206+
- [BPMN 2.0 标准介绍](https://www.omg.org/spec/BPMN/2.0/)

0 commit comments

Comments
 (0)