成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Flowable 流程實例的掛起(暫停)與激活

數據庫 其他數據庫
執行的 SQL 中我們可以清晰的看到,操作的表是 ACT_RE_PROCDEF?,修改的字段就是 SUSPENSION_STATE_,將該字段的值修改為 2(樂觀鎖相關的 REV_ 字段不考慮)。

今天來和小伙伴們聊一聊流程的掛起和激活。

這塊實際上涉及到兩部分內容:

流程定義的掛起和激活。

流程實例的掛起和激活。

一個定義好的流程,如果掛起了,那么就無法據此創建新的流程。

一個流程實例如果掛起了,那么就無法執行流程中的任務。

小伙伴們注意區分這兩個概念(看了前面幾篇文章的小伙伴,應該對于這兩個概念不在話下了)。

我們分別來看。

1. 流程定義的掛起與激活

1.1 查詢是否掛起

對于一個定義好的流程,我們可以通過如下方法來查看這個流程是否掛起:

@Test
void test05() {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition processDefinition : list) {
String id = processDefinition.getId();
boolean suspended = repositoryService.isProcessDefinitionSuspended(id);
if (suspended) {
logger.info("流程定義 {} 已掛起",processDefinition.getName());
}else{
logger.info("流程定義 {} 未掛起",processDefinition.getName());
}
}
}

這個查詢 SQL 涉及到的表是 ACT_RE_PROCDEF,該表中有一個名為 SUSPENSION_STATE_ 的字段,該字段表示這個流程是否掛起。如下圖:

圖片

1 表示流程沒有掛起。

1.2 掛起

執行如下方法,可以掛起一個流程定義,如下:

@Test
void test06() {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition pd : list) {
repositoryService.suspendProcessDefinitionById(pd.getId());
}
}

掛起的原理其實很簡單,就是去 ACT_RE_PROCDEF 表中,將 SUSPENSION_STATE_ 字段的值設置為 2,就表示這個流程定義掛起了,我們可以看下流程定義掛起時執行的 SQL:

圖片

從這個執行的 SQL 中我們可以清晰的看到,操作的表是 ACT_RE_PROCDEF,修改的字段就是 SUSPENSION_STATE_,將該字段的值修改為 2(樂觀鎖相關的 REV_ 字段不考慮)。

對于一個已經掛起的流程定義,如果我們想據此啟動一個流程,如下:

@Test
void test01() {
identityService.setAuthenticatedUserId("wangwu");
ProcessInstance pi = runtimeService.startProcessInstanceByKey("leave");
logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

此時就會拋出如下異常:

圖片

這個異常說的很明白了,流程定義被掛起了,無法開啟一個新的流程實例。

1.3 激活

已經掛起的流程定義,還可以激活,方式如下:

@Test
void test07() {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition pd : list) {
repositoryService.activateProcessDefinitionById(pd.getId());
}
}

激活的原理也很簡單,,就是去 ACT_RE_PROCDEF 表中,將 SUSPENSION_STATE_ 字段的值設置為 1,就表示這個流程定義激活了,我們可以看下流程定義激活時執行的 SQL:

圖片

大家注意看操作的表、字段以及對應的參數。

2. 流程實例的掛起與激活

第一小節搞懂了,第二小節就容易多了。

2.1 掛起

掛起一個流程實例的方式如下:

@Test
void test08() {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition pd : list) {
repositoryService.suspendProcessDefinitionById(pd.getId(), true, null);
}
}

小伙伴們看到,其實還是剛才上面的那個方法,只不過這里多了兩個參數:

第二個參數 true 表示是否要掛起這個流程定義對應的所有的流程實例,true 表示掛起。

第三個參數 null 表示流程掛起的具體時間,如果該參數為 null,則流程會被立馬掛起,如果該參數是一個具體的日期,則到期之后流程才會被掛起,但是這個需要 job executor 的支持,關于 job executor,松哥后面再單獨發文章和小伙伴們介紹。

執行完成之后,這個流程實例就被掛起了。流程實例被掛起,涉及到兩個地方:

流程的執行實例被掛起。

流程的 Task 被掛起。

也就是首先 ACT_RU_EXECUTION 表中對應的流程實例會被掛起:

圖片

最后一列兩個 2 就說明這兩個執行實例被掛起了。

同時,流程實例的 Task 其實也被掛起了,即 ACT_RU_TASK 表中與之對應的任務被掛起了,如下:

圖片

可以看到,SUSPENSION_STATE_ 字段的值為 2,表示這 Task 也被掛起了。

我們來看看掛起流程實例時執行的 SQL:

圖片

注意,流程定義本身也被掛起了。

對于處于掛起狀態的流程實例,是無法繼續執行的,如果強行執行,如下:

@Test
void test03() {
List<Task> list = taskService.createTaskQuery().taskAssignee("wangwu").list();
for (Task task : list) {
taskService.complete(task.getId());
}
}

則會拋出異常,如下:

圖片

這個異常也說的很清楚了,無法完成一個處于掛起狀態的 Task。

2.2 激活

處于掛起狀態的流程實例,可以通過如下方式激活:

@Test
void test09() {
List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list();
for (ProcessDefinition pd : list) {
repositoryService.activateProcessDefinitionById(pd.getId(), true, null);
}
}

一共三個參數:

  • 流程定義的 ID。
  • 是否激活流程定義對應的流程實例。
  • 激活流程實例的時間,null 表示立馬激活,如果是一個具體的時間,則到期激活,不過和之前的一樣,這里也需要 job executor 的支持。

激活就是反向操作,將 ACT_RU_EXECUTION、ACT_RU_TASK 以及 ACT_RE_PROCDEF 表中的 SUSPENSION_STATE_ 字段值再改為 1。對應的 SQL 如下:

圖片

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2022-09-24 13:29:42

Spring操作SQL

2022-09-26 14:25:55

Flowable流程ID

2010-07-19 11:11:43

Telnet連接會話

2022-10-27 14:18:13

Flowable流程變量

2022-10-31 10:41:02

Flowable流程前綴

2023-04-10 07:47:01

流程引擎Flowable

2022-05-06 10:42:09

JavaFlowable引擎

2024-05-31 12:38:32

2023-08-02 18:48:23

Flowable工作流引擎

2021-03-01 11:38:15

網絡安全進程代碼

2022-09-05 14:37:14

flowableVue 庫XML

2017-04-27 14:05:59

CSS動畫前端

2024-05-23 08:07:05

2010-08-05 10:00:18

NFS服務掛起

2022-07-07 08:38:15

Springflowable引擎

2010-09-26 14:55:46

JVM內存監控

2010-04-02 16:03:20

Oracle數據庫

2025-05-30 01:00:00

開源流程引擎

2021-05-13 10:12:55

Kubernetes 微服務軟件開發

2024-05-07 08:31:09

SpringFlowable業務流程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人免费视频观看视频 | 国产免费看 | 欧美精品成人 | 精品真实国产乱文在线 | 日本国产精品视频 | 久久av一区 | 91精品国产综合久久久久久丝袜 | 国产一级片在线观看视频 | 亚洲不卡在线视频 | 欧美精品电影一区 | 日韩伦理一区二区三区 | 国产精品中文字幕在线观看 | 国产午夜久久久 | 欧美亚洲第一区 | 欧美一级黄色片免费观看 | 自拍偷拍亚洲一区 | 羞羞视频免费观看入口 | 99re在线视频 | 成人亚洲性情网站www在线观看 | 亚洲午夜电影 | 一区二区三区在线电影 | 精品粉嫩超白一线天av | 欧美日韩激情 | 天天爽夜夜骑 | 日韩免费一区 | 日韩视频在线免费观看 | 99综合网| 国产不卡在线 | 日本三级在线视频 | 亚洲精品小视频在线观看 | 久久国产精品一区二区三区 | 天天碰日日操 | 久久蜜桃av一区二区天堂 | 国产精品日韩高清伦字幕搜索 | 一区二区三区av | 在线精品一区二区三区 | 亚洲男人天堂av | 97精品久久| 国产成人小视频 | 999精品在线| 男人天堂999 |