日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Flowable工作流引擎的科普與實(shí)踐

來源: 責(zé)編: 時(shí)間:2023-08-05 11:45:03 4711觀看
導(dǎo)讀一.引言當(dāng)我們在日常工作和業(yè)務(wù)中需要進(jìn)行各種審批流程時(shí),可能會(huì)面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動(dòng)處理這些審批流程可能會(huì)導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這種情況下,引入工作流引擎能夠帶來很多好處,讓

一.引言

當(dāng)我們在日常工作和業(yè)務(wù)中需要進(jìn)行各種審批流程時(shí),可能會(huì)面臨一系列技術(shù)和業(yè)務(wù)上的挑戰(zhàn)。手動(dòng)處理這些審批流程可能會(huì)導(dǎo)致開發(fā)成本的增加以及業(yè)務(wù)復(fù)雜度的上升。在這種情況下,引入工作流引擎能夠帶來很多好處,讓我們一起來看看:3SU28資訊網(wǎng)——每日最新資訊28at.com

  1. 開發(fā)成本的挑戰(zhàn):

在傳統(tǒng)的手動(dòng)審批系統(tǒng)中,開發(fā)人員需要從頭開始設(shè)計(jì)和實(shí)現(xiàn)整個(gè)審批流程,包括流程邏輯、狀態(tài)跟蹤、任務(wù)分配等。這可能需要大量的時(shí)間和精力,尤其是在涉及到復(fù)雜的業(yè)務(wù)場景時(shí)。3SU28資訊網(wǎng)——每日最新資訊28at.com

使用工作流引擎,開發(fā)人員可以利用其強(qiáng)大的流程建模和執(zhí)行功能,快速搭建審批系統(tǒng)。工作流引擎提供了圖形化的流程設(shè)計(jì)工具,讓流程建模變得簡單易懂。這樣,開發(fā)人員可以專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),大大降低了開發(fā)成本和周期。3SU28資訊網(wǎng)——每日最新資訊28at.com

  1. 業(yè)務(wù)復(fù)雜度的挑戰(zhàn):
  • 在實(shí)際的審批流程中,往往涉及到多個(gè)步驟、多個(gè)角色、多個(gè)條件等復(fù)雜情況。手動(dòng)處理這些復(fù)雜的業(yè)務(wù)流程可能會(huì)導(dǎo)致流程不一致、流程控制不清晰等問題,增加了業(yè)務(wù)的復(fù)雜度和錯(cuò)誤的可能性。
  • 工作流引擎提供了靈活的條件判斷和分支網(wǎng)關(guān)功能,可以輕松處理復(fù)雜的審批流程。不同的業(yè)務(wù)場景可以在流程圖中得到清晰的表達(dá),從而確保流程的邏輯一致性和可控性。同時(shí),F(xiàn)lowable引擎支持動(dòng)態(tài)變量和表單的設(shè)置,使得審批系統(tǒng)能夠滿足不同業(yè)務(wù)場景的靈活需求。

通過引入工作流引擎,我們可以克服手動(dòng)處理審批流程所帶來的開發(fā)成本高和業(yè)務(wù)復(fù)雜度的挑戰(zhàn)。它使得開發(fā)人員能夠更專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),快速構(gòu)建符合實(shí)際需求的審批系統(tǒng)。同時(shí),流程圖的可視化設(shè)計(jì)和條件判斷的支持,使得業(yè)務(wù)流程更加清晰、透明,降低了錯(cuò)誤發(fā)生的概率,提高了審批過程的效率和準(zhǔn)確性。這將為企業(yè)帶來更高的效益和競爭力。3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

二.技術(shù)選型

目前市面上比較主流的幾個(gè)工作流引擎包括Activiti、Flowable、Camunda等,體系較為成熟,使用最為廣泛的是activiti,flowable跟activiti本質(zhì)上沒什么區(qū)別,是由activiti改版而來,但是兩者后續(xù)發(fā)展路線則不一樣,Activiti后續(xù)發(fā)展重心是在商業(yè)版與云上面,并未對核心功能與性能優(yōu)化上有過多的跟進(jìn)優(yōu)化,而flowable當(dāng)下重心則是針對功能性、擴(kuò)展性、性能上進(jìn)行迭代優(yōu)化。3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

當(dāng)然,具體選型還是要看業(yè)務(wù)實(shí)際的需要,目前activiti迭代的方向并不是當(dāng)下我們業(yè)務(wù)所需要的,我們更重視性能、擴(kuò)展性這一塊,而flowbale與Camunda之間為什么選擇了flowable呢,則是因?yàn)閒lowable社區(qū)較為活躍,遇到并處理問題上更為效率,并且面對多節(jié)點(diǎn)審批時(shí),異步任務(wù)是提升吞吐率的優(yōu)質(zhì)之選。3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

下面我將簡單介紹下flowable的一些功能以及模塊。3SU28資訊網(wǎng)——每日最新資訊28at.com

三.Flowable引擎介紹

3.1 基礎(chǔ)元素

  1. 流程定義(Process Definition):
  • 流程定義是業(yè)務(wù)流程的抽象表示,它描述了流程中各個(gè)環(huán)節(jié)的順序和執(zhí)行邏輯。

在Flowable中,流程定義通常使用BPMN 2.0標(biāo)準(zhǔn)(Business Process Model and Notation)進(jìn)行建模,可以通過Flowable Modeler進(jìn)行圖形化設(shè)計(jì)。3SU28資訊網(wǎng)——每日最新資訊28at.com

  1. 流程實(shí)例(Process Instance):
  • 流程實(shí)例是流程定義的一個(gè)具體執(zhí)行實(shí)例。每當(dāng)一個(gè)流程啟動(dòng)時(shí),就會(huì)創(chuàng)建一個(gè)新的流程實(shí)例,這個(gè)實(shí)例將遵循流程定義中規(guī)定的執(zhí)行邏輯。
  • 每個(gè)流程實(shí)例都有一個(gè)唯一的標(biāo)識符,用于跟蹤和管理流程的執(zhí)行狀態(tài)。
  1. 任務(wù)(Task):
  • 任務(wù)表示流程中的具體工作單元,需要由參與者(用戶或系統(tǒng))完成。
  • 在Flowable中,任務(wù)可以是用戶任務(wù)(Human Task)、服務(wù)任務(wù)(Service Task)、腳本任務(wù)(Script Task)等類型。
  1. 網(wǎng)關(guān)(Gateway):
  • 網(wǎng)關(guān)用于在流程中進(jìn)行條件分支和合并操作,根據(jù)一定的條件來控制流程的走向。
  • Flowable提供了多種類型的網(wǎng)關(guān),如排他網(wǎng)關(guān)(Exclusive Gateway)、并行網(wǎng)關(guān)(Parallel Gateway)等。
  1. 執(zhí)行(Execution):
  • 執(zhí)行代表了流程中的一個(gè)具體執(zhí)行狀態(tài),包括當(dāng)前的節(jié)點(diǎn)、變量值等信息。
  • 當(dāng)流程實(shí)例執(zhí)行時(shí),會(huì)產(chǎn)生一系列執(zhí)行對象,它們共同組成了流程的執(zhí)行路徑。
  1. 變量(Variable):
  • 變量用于在流程中傳遞和保存數(shù)據(jù),可以在流程的不同節(jié)點(diǎn)間進(jìn)行傳遞和共享。
  • Flowable允許在流程實(shí)例中動(dòng)態(tài)添加、修改和刪除變量。
  1. 監(jiān)聽器(Listener):
  • 監(jiān)聽器用于在流程的不同生命周期階段監(jiān)聽事件,例如流程啟動(dòng)、流程結(jié)束、任務(wù)分配等事件。
  • Flowable支持多種類型的監(jiān)聽器,開發(fā)者可以根據(jù)需求自定義監(jiān)聽邏輯。

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

這些是Flowable中的一些基礎(chǔ)元素,它們構(gòu)成了流程引擎的核心。通過這些元素,我們可以靈活地設(shè)計(jì)和管理復(fù)雜的業(yè)務(wù)流程,使得流程執(zhí)行更加高效、透明和可控。3SU28資訊網(wǎng)——每日最新資訊28at.com

3.2 API說明

在調(diào)用開始之前,我們簡單說明一下各個(gè)api的作用以及應(yīng)用場景:3SU28資訊網(wǎng)——每日最新資訊28at.com

  1. RepositoryService:
  • RepositoryService用于管理流程和流程部署相關(guān)的操作。
  • 可以通過該Service部署、刪除、查詢流程定義,以及獲取流程定義的資源文件等。
  1. RuntimeService:
  • RuntimeService用于管理流程實(shí)例的啟動(dòng)、掛起、終止等操作。
  • 可以通過該Service啟動(dòng)流程實(shí)例,查詢流程實(shí)例狀態(tài),設(shè)置流程變量等。
  1. TaskService:
  • TaskService用于管理任務(wù)的創(chuàng)建、完成、分配等操作。
  • 可以通過該Service查詢用戶任務(wù)、完成任務(wù),指定任務(wù)的辦理人等。
  1. IdentityService:
  • IdentityService用于管理用戶、組和用戶組的操作。
  • 可以通過該Service創(chuàng)建、刪除、查詢用戶和組,將用戶加入到用戶組等。
  1. HistoryService:
  • HistoryService用于查詢流程實(shí)例和任務(wù)的歷史數(shù)據(jù)。
  • 可以通過該Service查詢已完成的流程實(shí)例、已完成的任務(wù),以及歷史的流程變量值等。
  1. ManagementService:
  • ManagementService用于執(zhí)行一些底層的管理操作,如數(shù)據(jù)庫表的創(chuàng)建、刪除,作業(yè)的執(zhí)行,引擎的配置等。
  • 一般情況下,開發(fā)人員不需要直接使用ManagementService,因?yàn)樗鼒?zhí)行的操作較為底層。

3.3系統(tǒng)數(shù)據(jù)表介紹

啟動(dòng)后會(huì)自動(dòng)生成一些內(nèi)置的系統(tǒng)表(如果不想自動(dòng)生成可以通過配置關(guān)閉),這里簡單介紹一下表的含義:3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_HI_*: 歷史數(shù)據(jù)表,例如:3SU28資訊網(wǎng)——每日最新資訊28at.com

表名3SU28資訊網(wǎng)——每日最新資訊28at.com

含義3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_HI_PROCINST3SU28資訊網(wǎng)——每日最新資訊28at.com

歷史流程實(shí)例表,存儲(chǔ)已完成的流程實(shí)例信息,包括流程開始時(shí)間、結(jié)束時(shí)間等。3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_HI_TASKINST3SU28資訊網(wǎng)——每日最新資訊28at.com

歷史任務(wù)實(shí)例表,存儲(chǔ)已完成的任務(wù)實(shí)例信息,包括任務(wù)開始時(shí)間、結(jié)束時(shí)間、辦理人等。3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_HI_VARIABLE3SU28資訊網(wǎng)——每日最新資訊28at.com

歷史流程變量表,用于存儲(chǔ)在流程運(yùn)行時(shí)設(shè)置的變量信息。3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_RU_*: 運(yùn)行時(shí)的數(shù)據(jù)表,節(jié)點(diǎn)結(jié)束時(shí)清除,例如:3SU28資訊網(wǎng)——每日最新資訊28at.com

表名3SU28資訊網(wǎng)——每日最新資訊28at.com

含義3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_RU_EXECUTION3SU28資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行時(shí)流程執(zhí)行實(shí)例表,存儲(chǔ)當(dāng)前正在執(zhí)行的流程實(shí)例信息。3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_RU_TASK3SU28資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行時(shí)任務(wù)表,存儲(chǔ)當(dāng)前正在執(zhí)行的任務(wù)信息。3SU28資訊網(wǎng)——每日最新資訊28at.com

ACT_RU_VARIABLE3SU28資訊網(wǎng)——每日最新資訊28at.com

運(yùn)行時(shí)流程變量表,用于存儲(chǔ)在流程運(yùn)行時(shí)設(shè)置的變量信息。3SU28資訊網(wǎng)——每日最新資訊28at.com

另外,flowable支持定期清理歷史數(shù)據(jù),業(yè)務(wù)側(cè)可以定義一個(gè)時(shí)間范圍,超過時(shí)間范圍可以認(rèn)為數(shù)據(jù)可以被清理,系統(tǒng)內(nèi)部會(huì)自行將數(shù)據(jù)物理刪除,為歷史表做瘦身操作。3SU28資訊網(wǎng)——每日最新資訊28at.com

不過我們業(yè)務(wù)側(cè)接入的時(shí)候,往往業(yè)務(wù)需要?jiǎng)?chuàng)建幾個(gè)符合我們具體業(yè)務(wù)場景的表,例如工單表、任務(wù)表雖然框架提供了,但是并沒有記錄詳細(xì)的狀態(tài),這些狀態(tài)是我們業(yè)務(wù)自己定義的,所以需要額外創(chuàng)建業(yè)務(wù)工單表、審批任務(wù)(節(jié)點(diǎn))表、流水表等來進(jìn)行數(shù)據(jù)上的冗余來滿足實(shí)際的業(yè)務(wù)場景。3SU28資訊網(wǎng)——每日最新資訊28at.com

四.流程圖建模繪制

4.1 BPMN 2.0協(xié)議

我們可以通過可視化后臺(tái)繪制流程建模,生成BPMN格式的文件,那么BMPN又是什么呢?3SU28資訊網(wǎng)——每日最新資訊28at.com

BPMN(Business Process Model and Notation)是一種用于建模業(yè)務(wù)流程的標(biāo)準(zhǔn)化符號和語法,用于描述業(yè)務(wù)流程的各個(gè)環(huán)節(jié)和活動(dòng)。BPMN的最新版本是BPMN 2.0,它是業(yè)務(wù)流程建模領(lǐng)域的國際標(biāo)準(zhǔn),由OMG(Object Management Group)制定和發(fā)布。3SU28資訊網(wǎng)——每日最新資訊28at.com

BPMN 2.0的主要目標(biāo)是提供一種統(tǒng)一的標(biāo)準(zhǔn),使得不同人員和組織能夠使用相同的符號和語法來建模和理解業(yè)務(wù)流程,從而增加流程的可視化和可讀性。3SU28資訊網(wǎng)——每日最新資訊28at.com

它具有以下特點(diǎn)和優(yōu)勢:3SU28資訊網(wǎng)——每日最新資訊28at.com

  1. 圖形化表示:
  • BPMN 2.0使用圖形化符號來表示業(yè)務(wù)流程,包括開始事件、結(jié)束事件、任務(wù)、網(wǎng)關(guān)等。這些符號使得流程的設(shè)計(jì)和閱讀更加直觀和易懂。
  1. 豐富的元素:
  • BPMN 2.0定義了豐富的元素和連接方式,可以描述復(fù)雜的業(yè)務(wù)流程,包括順序流、消息流、時(shí)間流等。
  1. 流程分支和合并:
  • BPMN 2.0支持多種類型的網(wǎng)關(guān)元素,如排他網(wǎng)關(guān)、并行網(wǎng)關(guān)等,用于實(shí)現(xiàn)條件分支和合并,使得流程的走向更加靈活。
  1. 子流程支持:
  • BPMN 2.0允許將復(fù)雜的業(yè)務(wù)流程分解為多個(gè)子流程,使得整體流程更易于管理和維護(hù)。
  1. 擴(kuò)展性:
  • BPMN 2.0支持自定義屬性和擴(kuò)展元素,使得業(yè)務(wù)流程模型能夠滿足特定業(yè)務(wù)需求。
  1. 與執(zhí)行引擎的結(jié)合:
  • BPMN 2.0是與執(zhí)行引擎(如Flowable)無縫集成的,這使得通過工作流引擎執(zhí)行流程變得更加高效和自動(dòng)化。

4.2 繪制

我們可以從Flowable官網(wǎng)下載flowable-ui部署到本地來啟動(dòng)可視化后臺(tái),可以使用在線的Flowable Modeler來繪制,這里我們使用官網(wǎng)的flowable-ui來繪制。3SU28資訊網(wǎng)——每日最新資訊28at.com

具體下載啟動(dòng)過程我就不過多贅述了,flowable-ui是基于 springboot2.0開發(fā)的,可以直接以下方式來啟動(dòng):3SU28資訊網(wǎng)——每日最新資訊28at.com

java -jar flowable-ui.war

啟動(dòng)成功后如圖所示:3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

我們打開建模器應(yīng)用程序并點(diǎn)擊【創(chuàng)建流程】按鈕,我們可以給模型進(jìn)行一個(gè)簡單的定義.3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

如圖繪制了一個(gè)最簡單的流程建模3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

我們也可以給用戶任務(wù)分配一些基礎(chǔ)屬性,這里我們配置一個(gè)固定用戶, 當(dāng)然這里也支持占位符來動(dòng)態(tài)控制3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

Image.png3SU28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片3SU28資訊網(wǎng)——每日最新資訊28at.com

這樣一個(gè)最簡單的流程建模(不含復(fù)雜節(jié)點(diǎn)、網(wǎng)關(guān)等)就繪制完畢了,繪制完成后會(huì)生成一個(gè)xml文件,3SU28資訊網(wǎng)——每日最新資訊28at.com

接下來我會(huì)從導(dǎo)入到執(zhí)行來執(zhí)行執(zhí)行一遍該流程。3SU28資訊網(wǎng)——每日最新資訊28at.com

五.快速開始

5.1 導(dǎo)入starter

<dependency>            <groupId>org.flowable</groupId>            <artifactId>flowable-spring-boot-starter</artifactId>            <version>6.6.0</version>        </dependency>

5.2 導(dǎo)入建模

@Test public void createConfig() throws Exception{    File file = new File("/Users/xxx/Documents/flowbale/model/testModel.bpmn20.xml");    final FileInputStream fileInputStream = new FileInputStream(file);    final Deployment deploy = repositoryService.createDeployment()                .addInputStream("testModel.bpmn20.xml", fileInputStream).tenantId("類似于業(yè)務(wù)線的id,可以做數(shù)據(jù)隔離用")                .name("testModel").deploy();    System.out.println("id=" + deploy.getId()); }

5.3 查詢流程建模的基本信息

@Test    public void getProcessDefinition() {        final ProcessDefinition rst =                repositoryService.createProcessDefinitionQuery().processDefinitionKey("testModel").orderByProcessDefinitionVersion().desc().list().get(0);        System.out.println(rst.toString());    }

5.4 創(chuàng)建審批工單

// processDefinitionKey 流程建模的key// businessId 具有業(yè)務(wù)屬性的id// variableMap變量的map 結(jié)果會(huì)存入 ACT_RU_VARIABLE表中,如果審批人傳入的是變量就需要再節(jié)點(diǎn)執(zhí)行前將變量傳入到系統(tǒng)中Map<String, Object> variableMap = new HashMap();variableMap.put("testUserList", Lists.newArrayList("nick","jack","tony"));String processDefinitionKey = "testModel";Long businessId = 1L;String tenantId = "1001";runtimeService.startProcessInstanceByKeyAndTenantId(processDefinitionKey, businessId + "", variableMap, tenantId);

5.5 獲取待審批工單

final List<Task> taskList = taskService.createTaskQuery().taskAssignee("jack").list()

5.6 審批工單

Map<String, Object> variableMap = new HashMap();// 我們自己定義了一個(gè)內(nèi)部標(biāo)準(zhǔn)化字段,flag代表著節(jié)點(diǎn)是通過還是駁回,在互斥網(wǎng)關(guān)判斷通過駁回的時(shí)候會(huì)用到。variableMap.put("flag", 1);taskService.complete(taskId), variableMap);

5.7 事件監(jiān)聽

我們通過上述用例了解了一個(gè)工單是如何操作流轉(zhuǎn)的,但是一個(gè)完整的審批服務(wù)是應(yīng)該有消息推送的,當(dāng)審批節(jié)點(diǎn)到達(dá)某個(gè)人需要提醒他進(jìn)行審批操作,或者審批工單結(jié)束了需要通知發(fā)起人,我們應(yīng)該如何操作呢?Flowable提供了便攜的事件監(jiān)聽器,不需要我們額外編寫代碼來判斷是否到達(dá)相應(yīng)的節(jié)點(diǎn),我們這里常用的就是節(jié)點(diǎn)創(chuàng)建、節(jié)點(diǎn)完成、流程結(jié)束等。3SU28資訊網(wǎng)——每日最新資訊28at.com

Flowable支持的事件有幾十種,具體大家請自行去官網(wǎng)參考,下面僅展示“流程結(jié)束事件”監(jiān)聽器的代碼用例:3SU28資訊網(wǎng)——每日最新資訊28at.com

package com.zhuanzhuan.workflow_engine.config;import com.zhuanzhuan.workflow_engine.listener.*;import lombok.extern.slf4j.Slf4j;import org.flowable.common.engine.api.delegate.event.FlowableEngineEventType;import org.flowable.common.engine.api.delegate.event.FlowableEventDispatcher;import org.flowable.spring.SpringProcessEngineConfiguration;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationListener;import org.springframework.context.annotation.Configuration;import org.springframework.context.event.ContextRefreshedEvent;/** * @author:Live * @desc: * @date: 19:55 2023/1/13 */@Configuration@Slf4jpublic class FlowableListenerConfiguration implements ApplicationListener<ContextRefreshedEvent> {    @Autowired    private SpringProcessEngineConfiguration configuration;       @Autowired    private ProcessEndListener processEndListener;      @Override    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {        FlowableEventDispatcher dispatcher = configuration.getEventDispatcher();              dispatcher.addEventListener(processEndListener, FlowableEngineEventType.PROCESS_COMPLETED);           }}
package com.zhuanzhuan.workflow_engine.listener;import com.bj58.zhuanzhuan.zzarch.common.util.JsonUtil;import com.zhuanzhuan.workflow_engine.entity.dto.WorkflowOrderDTO;import com.zhuanzhuan.workflow_engine.enums.CurrentFlagEnum;import com.zhuanzhuan.workflow_engine.enums.WorkflowStateEnum;import com.zhuanzhuan.workflow_engine.mq.MqConstant;import com.zhuanzhuan.workflow_engine.mq.body.ProcessExchangeMsgBody;import com.zhuanzhuan.workflow_engine.mq.producer.ProducerHandler;import com.zhuanzhuan.workflow_engine.service.WorkflowOrderBizService;import com.zhuanzhuan.workflow_engine.wrapper.FlowableWrapper;import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import org.flowable.common.engine.api.delegate.event.FlowableEvent;import org.flowable.engine.delegate.event.impl.FlowableEntityEventImpl;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import javax.annotation.Resource;/** * @author:Live * @desc: * @date: 19:34 2023/1/13 */@Component@Slf4jpublic class ProcessEndListener implements FlowableEventListener {    @Override    public void onEvent(FlowableEvent flowableEvent) {      // 流程結(jié)束的監(jiān)聽器,發(fā)送mq、給發(fā)起人發(fā)送消息在此進(jìn)行    }        @Override    public boolean isFailOnException() {        // 拋異常, 不姑息        return true;    }    @Override    public boolean isFireOnTransactionLifecycleEvent() {        // event觸發(fā)時(shí)機(jī)跟著 getOnTransaction走        return true;    }    @Override    public String getOnTransaction() {        // 提交事務(wù)后觸發(fā)        return TransactionState.COMMITTED.name();    }}

六.總結(jié)

以上就是Flowable工作流引擎的簡介以及基本用法,我們實(shí)際生產(chǎn)建設(shè)過程中,還需要基于框架進(jìn)行拓展開發(fā)來滿足我們項(xiàng)目的實(shí)際需要,例如是否需要引入用戶組、權(quán)限管理的模塊、是否存在性能問題從而引入異步任務(wù)的模塊、是否需要冗余業(yè)務(wù)表來滿足定制化查詢的需求,這些都屬于擴(kuò)展玩法,需要我們根據(jù)實(shí)際需求按需接入。畢竟沒有最好的架構(gòu),只有最適合的架構(gòu),選擇適合自己的才是最重要的。3SU28資訊網(wǎng)——每日最新資訊28at.com

七.參考資料

1.flowable官方文檔 https://www.flowable.org/documentation.html
2.技術(shù)選型參考 https://www.zhihu.com/question/59274016/answer/23982405133SU28資訊網(wǎng)——每日最新資訊28at.com

關(guān)于作者 3SU28資訊網(wǎng)——每日最新資訊28at.com

王銳剛,線上回收業(yè)務(wù)后端開發(fā)工程師3SU28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-101-0.htmlFlowable工作流引擎的科普與實(shí)踐

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 得物效率前端微應(yīng)用推進(jìn)過程與思考

下一篇: 學(xué)習(xí)JavaScript的10個(gè)理由...

標(biāo)簽:
  • 熱門焦點(diǎn)
  • 2023年Q2用戶偏好榜:12+256G版本成新主流

    3月份的性能榜、性價(jià)比榜和好評榜之后,就要輪到2023年的第二季度偏好榜了,上半年的新機(jī)潮已經(jīng)過去,最明顯的肯定就是大內(nèi)存和存儲(chǔ)的機(jī)型了,另外部分中端機(jī)也取消了屏幕塑料支架
  • 十個(gè)可以手動(dòng)編寫的 JavaScript 數(shù)組 API

    JavaScript 中有很多API,使用得當(dāng),會(huì)很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進(jìn)行一次小總結(jié)。現(xiàn)在開始吧。1.forEach()forEach()用于遍歷數(shù)組接收一參
  • Automa-通過連接塊來自動(dòng)化你的瀏覽器

    1、前言通過瀏覽器插件可實(shí)現(xiàn)自動(dòng)化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業(yè)務(wù)來說可快速實(shí)現(xiàn)自動(dòng)化的上手工作。Selenium IDEKat
  • 分布式系統(tǒng)中的CAP理論,面試必問,你理解了嘛?

    對于剛剛接觸分布式系統(tǒng)的小伙伴們來說,一提起分布式系統(tǒng),就感覺高大上,深不可測。而且看了很多書和視頻還是一臉懵逼。這篇文章主要使用大白話的方式,帶你理解一下分布式系統(tǒng)
  • 2天漲粉255萬,又一賽道在抖音爆火

    來源:運(yùn)營研究社作者 | 張知白編輯 | 楊佩汶設(shè)計(jì) | 晏談夢潔這個(gè)暑期,旅游賽道徹底火了:有的「地方」火了&mdash;&mdash;貴州村超旅游收入 1 個(gè)月超過 12 億;有的「博主」火了&m
  • 年輕人的“職場羞恥感”,無處不在

    作者:馮曉亭 陶 淘 李 欣 張 琳 馬舒葉來源:燃次元&ldquo;人在職場,應(yīng)該選擇什么樣的著裝?&rdquo;近日,在網(wǎng)絡(luò)上,一個(gè)與著裝相關(guān)的帖子引發(fā)關(guān)注,在該帖子里,一位在高級寫字樓亞洲金
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯(lián)網(wǎng)那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發(fā)布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時(shí)代麒麟電池,容量為101kWh,電壓為726.7V,可以預(yù)測小
  • 信通院:小米、華為等11家應(yīng)用商店基本完成APP簽名及驗(yàn)簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機(jī)助手、百度手機(jī)助手、應(yīng)用寶、豌豆莢和努比亞等9家應(yīng)用商店,以及抖音和快手2家新型應(yīng)用分發(fā)平
Top 主站蜘蛛池模板: 西乌珠穆沁旗| 广安市| 凤阳县| 邵阳县| 广河县| 朝阳市| 吴川市| 滨海县| 濮阳县| 宜兴市| 垣曲县| 浏阳市| 尼勒克县| 囊谦县| 衡东县| 双桥区| 湘西| 元氏县| 延津县| 清镇市| 台北市| 高碑店市| 灯塔市| 新泰市| 双牌县| 河池市| 唐河县| 枣阳市| 兴山县| 安泽县| 碌曲县| 乐山市| 恭城| 个旧市| 平山县| 九江县| 阳信县| 虞城县| 乐至县| 门头沟区| 和硕县|