国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flowable介紹及使用示例

這篇具有很好參考價值的文章主要介紹了Flowable介紹及使用示例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Flowable簡介

Flowable是一個開源的用于處理和管理業(yè)務流程的框架。它提供了一個用于建模、執(zhí)行和監(jiān)控業(yè)務流程的平臺。Flowable支持BPMN 2.0規(guī)范,提供了基于流程引擎的各種功能,包括流程定義、流程實例、任務、事件等。

底層實現(xiàn)

Java

Flowable的核心是基于Java語言開發(fā)的。Java提供了強大的面向?qū)ο缶幊棠芰?,使得Flowable可以更好地封裝和管理業(yè)務流程的各個組件。

Spring Framework

Flowable使用Spring Framework來實現(xiàn)依賴注入和事務管理等功能。Spring Framework提供了一個輕量級的容器,使得Flowable的組件可以方便地進行解耦和集成。

MyBatis

Flowable使用MyBatis作為持久層框架,用于與數(shù)據(jù)庫進行交互。MyBatis提供了強大的SQL映射功能,能夠方便地將Java對象映射到數(shù)據(jù)庫表中。

Activiti

Flowable是由Activiti項目發(fā)展而來的。Activiti是一個基于BPMN 2.0規(guī)范的開源工作流引擎,F(xiàn)lowable在Activiti的基礎上進行了改進和擴展。

Flowable的使用示例

下面以一個簡單的請假流程為例,介紹Flowable的使用方法。

引入依賴

在項目的pom.xml文件中添加以下依賴:

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-engine</artifactId>
    <version>6.7.0</version>
</dependency>

創(chuàng)建流程定義

使用BPMN 2.0規(guī)范創(chuàng)建一個請假流程的定義,保存為leave.bpmn20.xml文件。定義中包含了請假申請、主管審批和人事審批等環(huán)節(jié)。

部署流程定義

使用Flowable提供的API,將流程定義部署到流程引擎中:

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
    .addClasspathResource("leave.bpmn20.xml")
    .deploy();

啟動流程實例

使用Flowable提供的API,啟動一個請假流程的實例:

RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess");

啟動流程實例

使用Flowable提供的API,啟動一個請假流程的實例:

RuntimeService runtimeService = processEngine.getRuntimeService();
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess");

處理任務

根據(jù)流程定義,流程實例會生成一系列的任務。使用Flowable提供的API,處理這些任務:

TaskService taskService = processEngine.getTaskService(); 
List tasks = taskService.createTaskQuery()
						.processInstanceId(processInstance.getId())
						.list(); 
for (Task task : tasks) {
	// 處理任務邏輯 // ... // 完成任務
	taskService.complete(task.getId());
}

監(jiān)控流程實例

使用Flowable提供的API,可以監(jiān)控流程實例的狀態(tài)和執(zhí)行情況:

HistoryService historyService = processEngine.getHistoryService();
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
																.processInstanceId(processInstance.getId())
																.singleResult();
System.out.println("流程實例結(jié)束時間:" + historicProcessInstance.getEndTime());

高級用法

Flowable是一個功能強大的業(yè)務流程框架,除了基本的流程定義、流程實例和任務管理外,它還提供了許多高級功能,如流程監(jiān)聽器、事件驅(qū)動、定時任務等。

流程監(jiān)聽器

流程監(jiān)聽器可以在流程執(zhí)行過程中監(jiān)聽和處理各種事件,例如流程啟動、任務分配、任務完成等。我們可以通過實現(xiàn) DelegateExecutionListener 接口來自定義流程監(jiān)聽器,并將其與流程定義關聯(lián)。

以下是一個示例代碼,演示了如何在流程啟動和任務完成時觸發(fā)自定義的流程監(jiān)聽器:

public class MyExecutionListener implements DelegateExecutionListener {

    @Override
    public void notify(DelegateExecution execution) {
        String eventName = execution.getEventName();
        if (EVENTNAME_START.equals(eventName)) {
            // 流程啟動時觸發(fā)的邏輯
            System.out.println("流程已啟動");
        } else if (EVENTNAME_END.equals(eventName)) {
            // 任務完成時觸發(fā)的邏輯
            System.out.println("任務已完成");
        }
    }
}

將監(jiān)聽器與流程定義關聯(lián):

BpmnModel bpmnModel = new BpmnModel();
Process process = new Process();
process.setId("myProcess");
process.addExecutionListener(EVENTNAME_START, new MyExecutionListener());
process.addExecutionListener(EVENTNAME_END, new MyExecutionListener());
bpmnModel.addProcess(process);

repositoryService.createDeployment()
    .addBpmnModel("myProcess.bpmn20.xml", bpmnModel)
    .deploy();

事件驅(qū)動

Flowable支持事件驅(qū)動的流程執(zhí)行,即根據(jù)外部事件觸發(fā)流程的執(zhí)行。我們可以通過實現(xiàn) FlowableEventListener 接口來監(jiān)聽并處理各種事件。

以下是一個示例代碼,演示了如何使用事件驅(qū)動來觸發(fā)流程執(zhí)行:

public class MyEventListener implements FlowableEventListener {

    @Override
    public void onEvent(FlowableEvent event) {
        if (event.getType().equals(FlowableEngineEventType.PROCESS_STARTED)) {
            // 流程啟動事件
            System.out.println("流程已啟動");
        } else if (event.getType().equals(FlowableEngineEventType.TASK_COMPLETED)) {
            // 任務完成事件
            System.out.println("任務已完成");
        }
    }

    @Override
    public boolean isFailOnException() {
        return false;
    }
}

將事件監(jiān)聽器注冊到流程引擎:

ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
configuration.setEventListeners(Collections.singletonList(new MyEventListener()));
ProcessEngine processEngine = configuration.buildProcessEngine();

定時任務

Flowable支持定時任務的執(zhí)行,可以在流程執(zhí)行過程中設置定時事件,例如延時觸發(fā)任務、定時觸發(fā)事件等。

以下是一個示例代碼,演示了如何在流程中設置定時任務:

BpmnModel bpmnModel = new BpmnModel();
Process process = new Process();
process.setId("myProcess");

StartEvent startEvent = new StartEvent();
startEvent.setId("startEvent"); process.addFlowElement(startEvent);

TimerEventDefinition timerEventDefinition = new TimerEventDefinition(); timerEventDefinition.setTimeDuration("PT1H"); startEvent.addEventDefinition(timerEventDefinition);

UserTask userTask = new UserTask(); userTask.setId("userTask"); process.addFlowElement(userTask);

SequenceFlow sequenceFlow = new SequenceFlow(); sequenceFlow.setSourceRef("startEvent"); sequenceFlow.setTargetRef("userTask"); process.addFlowElement(sequenceFlow);

bpmnModel.addProcess(process);

repositoryService.createDeployment() .addBpmnModel("myProcess.bpmn20.xml", bpmnModel) .deploy();

在上述示例中,我們創(chuàng)建了一個流程,其中包含一個啟動事件(StartEvent)和一個用戶任務(UserTask)。啟動事件中設置了一個定時器事件定義(TimerEventDefinition),表示在流程啟動后延時1小時觸發(fā)任務。

其他高級功能

除了上述介紹的流程監(jiān)聽器、事件驅(qū)動和定時任務之外,F(xiàn)lowable還提供了許多其他高級功能,如并行網(wǎng)關、條件網(wǎng)關、子流程、消息中間事件等。這些功能可以幫助我們更靈活地建模和執(zhí)行業(yè)務流程。

以下是一個示例代碼,演示了如何在流程中使用并行網(wǎng)關和條件網(wǎng)關:

BpmnModel bpmnModel = new BpmnModel();
Process process = new Process();
process.setId("myProcess");

StartEvent startEvent = new StartEvent();
startEvent.setId("startEvent");
process.addFlowElement(startEvent);

ParallelGateway parallelGateway = new ParallelGateway();
parallelGateway.setId("parallelGateway");
process.addFlowElement(parallelGateway);

ExclusiveGateway exclusiveGateway = new ExclusiveGateway();
exclusiveGateway.setId("exclusiveGateway");
process.addFlowElement(exclusiveGateway);

UserTask userTask1 = new UserTask();
userTask1.setId("userTask1");
process.addFlowElement(userTask1);

UserTask userTask2 = new UserTask();
userTask2.setId("userTask2");
process.addFlowElement(userTask2);

EndEvent endEvent = new EndEvent();
endEvent.setId("endEvent");
process.addFlowElement(endEvent);

SequenceFlow sequenceFlow1 = new SequenceFlow();
sequenceFlow1.setSourceRef("startEvent");
sequenceFlow1.setTargetRef("parallelGateway");
process.addFlowElement(sequenceFlow1);

SequenceFlow sequenceFlow2 = new SequenceFlow();
sequenceFlow2.setSourceRef("parallelGateway");
sequenceFlow2.setTargetRef("userTask1");
process.addFlowElement(sequenceFlow2);

SequenceFlow sequenceFlow3 = new SequenceFlow();
sequenceFlow3.setSourceRef("parallelGateway");
sequenceFlow3.setTargetRef("exclusiveGateway");
process.addFlowElement(sequenceFlow3);

SequenceFlow sequenceFlow4 = new SequenceFlow();
sequenceFlow4.setSourceRef("userTask1");
sequenceFlow4.setTargetRef("exclusiveGateway");
process.addFlowElement(sequenceFlow4);

SequenceFlow sequenceFlow5 = new SequenceFlow();
sequenceFlow5.setSourceRef("exclusiveGateway");
sequenceFlow5.setTargetRef("userTask2");
sequenceFlow5.setConditionExpression("${approved}");
process.addFlowElement(sequenceFlow5);

SequenceFlow sequenceFlow6 = new SequenceFlow();
sequenceFlow6.setSourceRef("exclusiveGateway");
sequenceFlow6.setTargetRef("endEvent");
process.addFlowElement(sequenceFlow6);

bpmnModel.addProcess(process);

repositoryService.createDeployment()
    .addBpmnModel("myProcess.bpmn20.xml", bpmnModel)
    .deploy();

在上述示例中,我們創(chuàng)建了一個流程,其中包含一個并行網(wǎng)關(ParallelGateway)和一個條件網(wǎng)關(Exclusive Gateway)。并行網(wǎng)關用于同時執(zhí)行多個任務,條件網(wǎng)關根據(jù)條件判斷流程的走向。

在并行網(wǎng)關后面有兩個用戶任務(UserTask1和UserTask2),它們可以同時執(zhí)行。在條件網(wǎng)關后面,根據(jù)條件 ${approved} 決定流程的走向,如果條件為true,則流程進入UserTask2;如果條件為false,則流程結(jié)束。

以上是Flowable的高級用法介紹,包括流程監(jiān)聽器、事件驅(qū)動、定時任務和其他高級功能。通過使用這些功能,我們可以更加靈活地建模和執(zhí)行業(yè)務流程,滿足各種復雜的業(yè)務需求。

使用時可能遇到的問題和注意事項

在使用Flowable時,可能會遇到以下問題和需要注意的事項:

  • 版本兼容性問題:Flowable的不同版本之間可能存在兼容性問題,需要根據(jù)具體情況選擇合適的版本。
  • 數(shù)據(jù)庫配置問題:Flowable默認使用H2數(shù)據(jù)庫,可以通過配置文件修改為其他數(shù)據(jù)庫,但需要注意數(shù)據(jù)庫的兼容性和連接配置。
  • 流程定義的更新問題:如果流程定義發(fā)生變化,需要先進行流程定義的升級操作,再啟動新的流程實例。
  • 任務處理的并發(fā)問題:在多線程環(huán)境下處理任務時,需要注意并發(fā)訪問的線程安全性問題。

結(jié)論

Flowable是一個功能強大的業(yè)務流程框架,底層使用了Java、Spring Framework、MyBatis和Activiti等技術(shù)。通過示例代碼的介紹,我們可以了解到如何使用Flowable來建模、執(zhí)行和監(jiān)控業(yè)務流程。在使用時要注意版本兼容性、數(shù)據(jù)庫配置、流程定義的更新和任務處理的并發(fā)等問題。

參考文獻

官方文檔:Flowable官方文檔提供了對Flowable框架的全面介紹和詳細說明,包括流程定義、流程實例、任務管理、API參考等??梢栽L問以下鏈接獲取文檔:https://flowable.com/open-source/docs

Flowable GitHub倉庫:Flowable的源代碼托管在GitHub上,你可以在該倉庫中找到示例代碼、演示項目和最新的發(fā)布版本。訪問以下鏈接獲取Flowable GitHub倉庫:https://github.com/flowable/flowable-engine

Flowable官方博客:Flowable官方博客定期發(fā)布有關Flowable的最新動態(tài)、功能更新和案例研究等文章??梢栽L問以下鏈接查看官方博客:https://blog.flowable.org/

Flowable論壇:Flowable官方論壇是一個活躍的社區(qū),你可以在論壇上提問、交流和分享關于Flowable的問題和經(jīng)驗。訪問以下鏈接參與Flowable論壇:https://forum.flowable.org/

Flowable官方培訓課程:Flowable官方提供了一系列在線培訓課程,幫助你深入學習Flowable的各個方面??梢栽L問以下鏈接獲取官方培訓課程:https://flowable.com/open-source/training/

如果大家遇到類似問題,歡迎評論區(qū)討論,如有錯誤之處,敬請留言。

Flowable介紹及使用示例,java,mybatis,spring,流程圖文章來源地址http://www.zghlxwxcb.cn/news/detail-715228.html

到了這里,關于Flowable介紹及使用示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Springboot +Flowable,通過代碼繪制流程圖并設置高亮

    Springboot +Flowable,通過代碼繪制流程圖并設置高亮

    通過代碼繪制一張流程圖,并設置成高亮。 首先先來看一下繪制出來的效果圖,截圖如下: 已經(jīng)執(zhí)行的節(jié)點和連線用紅色標記出來,大致上就是這么一個效果。 將一個流程圖繪制成圖片,相關的 API 在 flowable 中其實都是有提供的,流程圖片的繪制,是根據(jù)流程的定義來繪制

    2024年02月02日
    瀏覽(23)
  • 企業(yè)電子招標采購系統(tǒng)源碼Spring Boot + Mybatis + Redis + Layui + 前后端分離 構(gòu)建企業(yè)電子招采平臺之立項流程圖

    企業(yè)電子招標采購系統(tǒng)源碼Spring Boot + Mybatis + Redis + Layui + 前后端分離 構(gòu)建企業(yè)電子招采平臺之立項流程圖

    功能模塊: 待辦消息,招標公告,中標公告,信息發(fā)布 描述: 全過程數(shù)字化采購管理,打造從供應商管理到采購招投標、采購合同、采購執(zhí)行的全過程數(shù)字化管理。通供應商門戶具備內(nèi)外協(xié)同的能力,為外部供應商集中推送展示與其相關的所有采購業(yè)務信息(歷史合作、考

    2024年02月09日
    瀏覽(21)
  • 企業(yè)電子招標采購系統(tǒng)源碼Spring Boot + Mybatis + Redis + Layui + 前后端分離 構(gòu)建企業(yè)電子招采平臺之立項流程圖 tbms

    企業(yè)電子招標采購系統(tǒng)源碼Spring Boot + Mybatis + Redis + Layui + 前后端分離 構(gòu)建企業(yè)電子招采平臺之立項流程圖 tbms

    ? 項目說明 隨著公司的快速發(fā)展,企業(yè)人員和經(jīng)營規(guī)模不斷壯大,公司對內(nèi)部招采管理的提升提出了更高的要求。在企業(yè)里建立一個公平、公開、公正的采購環(huán)境,最大限度控制采購成本至關重要。符合國家電子招投標法律法規(guī)及相關規(guī)范,以及審計監(jiān)督要求;通過電子化

    2024年02月14日
    瀏覽(29)
  • Spring注解 @EventListener 的介紹與使用示例以及異常處理

    用途 將一個方法標記為監(jiān)聽器,用于監(jiān)聽應用程序事件,事件可以是 ApplicationEvent 實例,也可以是其他任意的對象。 如果一個監(jiān)聽器(被標注的方法)只支持單一的事件類型,那么該方法可以聲明一個唯一的參數(shù)用來反映要監(jiān)聽的事件類型。 如果一個監(jiān)聽器(被標注的方法

    2024年01月15日
    瀏覽(49)
  • MyBatis中的緩存介紹與示例

    MyBatis中的緩存介紹與示例

    目錄 什么是緩存? 一級緩存 實例效果 二次緩存 示例效果 什么是緩存? 在用戶訪問相同數(shù)據(jù)時,需要對數(shù)據(jù)庫多次訪問,導致產(chǎn)生大量IO、讀寫硬盤的操作,效率低下,有了緩存首次訪問時,查詢到數(shù)據(jù)庫數(shù)據(jù)庫,將數(shù)據(jù)庫存儲到緩存中,再次訪問時,直接訪問緩存減少

    2024年02月13日
    瀏覽(13)
  • 【Java系列】Mybatis-Plus 使用介紹二

    【Java系列】Mybatis-Plus 使用介紹二

    你只管努力,其他交給時間,時間會證明一切。 MyBatis-Plus 是 MyBatis 的增強工具,它簡化了 MyBatis 的開發(fā),并提供了許多實用的功能和工具類。下面是 MyBatis-Plus 的使用方法: 在 Maven 項目中,需要在 pom.xml 文件中添加如下依賴: 其中? mybatis-plus-boot-starter ?是 MyBatis-Plus 的 S

    2024年02月08日
    瀏覽(23)
  • 【Java系列】Mybatis-Plus 使用方式介紹

    【Java系列】Mybatis-Plus 使用方式介紹

    Mybatis-Plus 提供了多種方式來執(zhí)行 SQL,包括使用注解、XML 映射文件和 Lambda 表達式等。其中,使用 Lambda 表達式是 Mybatis-Plus 推薦的方式,因為它更加直觀和類型安全。 以下是一個使用 Lambda 表達式執(zhí)行 SQL 的示例,現(xiàn)在我們有一個名為? User ?的實體類,其中包含? id 、 name ?

    2024年02月07日
    瀏覽(27)
  • Java版企業(yè)電子招標采購系統(tǒng)源代碼Spring Boot + 二次開發(fā) + 前后端分離 構(gòu)建企業(yè)電子招采平臺之立項流程圖

    Java版企業(yè)電子招標采購系統(tǒng)源代碼Spring Boot + 二次開發(fā) + 前后端分離 構(gòu)建企業(yè)電子招采平臺之立項流程圖

    ??項目說明 隨著公司的快速發(fā)展,企業(yè)人員和經(jīng)營規(guī)模不斷壯大,公司對內(nèi)部招采管理的提升提出了更高的要求。在企業(yè)里建立一個公平、公開、公正的采購環(huán)境,最大限度控制采購成本至關重要。符合國家電子招投標法律法規(guī)及相關規(guī)范,以及審計監(jiān)督要求;通過電子化

    2024年02月07日
    瀏覽(93)
  • 【Java核心知識】spring boot整合Mybatis plus + Phoenix 訪問Hbase與使用注意

    為什么Phoenix能讓開發(fā)者通過SQL訪問Hbase而不必使用原生的方式?引用Phoenix官網(wǎng)上的一句話:SQL is just a way of expressing what you want to get not how you want to get it . 即SQL不是一種數(shù)據(jù)操作技術(shù),而是一種特殊的表達方式。只是表示你需要什么而不是你如何獲得。 一個集成了Phoenix的Hb

    2024年02月15日
    瀏覽(23)
  • Spring Boot集成MyBatis Plus中的QueryWrapper的eq方法詳解及示例代碼

    1. 簡介 MyBatis Plus是一個強大的MyBatis增強工具包,它為我們在進行數(shù)據(jù)庫操作時提供了很多便利的方法。其中,QueryWrapper是MyBatis Plus中的一個重要類,它可以用于構(gòu)建復雜的查詢條件。 在QueryWrapper中,eq方法是最常用的一個,它用于構(gòu)建等值條件查詢。在本文中,我們將詳細

    2024年02月10日
    瀏覽(44)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包