Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit b1e8a94

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /