Activiti 7 springboot 工作流引擎

1、前言介紹

1.1 Activiti簡介

Activiti是基于Apache許可的開源BPM平臺,創始人Tom Baeyens原是JBPM架構師,BPM是由Alfresco軟件發布的業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。

1.2 springboot 整合 Activiti7

activiti7提供了對springboot的場景starter(activiti-spring-boot-starter)和相應的依賴管理的包,所有整合過程相對簡單。

      <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-spring-boot-starter</artifactId>
            <version>7.1.0.M5</version>
        </dependency>
        <dependency>
            <groupId>org.activiti.dependencies</groupId>
            <artifactId>activiti-dependencies</artifactId>
            <version>7.1.0.M5</version>
            <type>pom</type>
        </dependency>

但是,Activiti7默認使用了Spring Security做權限認證,反而不利于使用。

2、Activiti 數據庫表結構

2.1 表名稱說明

表分類 分類說明
act_hi_* 'hi’表示 history,此前綴的表包含歷史數據,如歷史(結束)流程實例,變量,任務等等。
act_ge_* 'ge’表示 general,此前綴的表為通用數據,用于不同場景中。
act_evt_* 'evt’表示 event,此前綴的表為事件日志。
act_procdef_* 'procdef’表示 processdefine,此前綴的表為記錄流程定義信息。
act_re_* 're’表示 repository,此前綴的表包含了流程定義和流程靜態資源(圖片,規則等等)。
act_ru_* 'ru’表示 runtime,此前綴的表是記錄運行時的數據,包含流程實例,任務,變量,異步任務等運行中的數據。Activiti只在流程實例執行過程中保存這些數據,在流程結束時就會刪除這些記錄。

2.2 表注釋

表名 表注釋
act_ge_bytearray 二進制數據表,存儲通用的流程定義和流程資源。
act_ge_property 系統相關屬性,屬性數據表存儲整個流程引擎級別的數據,初始化表結構時,會默認插入三條記錄。
act_re_deployment 部署信息表
act_re_model 流程設計模型部署表
act_re_procdef 流程定義數據表
act_ru_deadletter_job 作業死亡信息表,作業失敗超過重試次數
act_ru_event_subscr 運行時事件表
act_ru_execution 運行時流程執行實例表
act_ru_identitylink 運行時用戶信息表
act_ru_integration 運行時積分表
act_ru_job 運行時作業信息表
act_ru_suspended_job 運行時作業暫停表
act_ru_task 運行時任務信息表
act_ru_timer_job 運行時定時器作業表
act_ru_variable 運行時變量信息表
act_hi_actinst 歷史節點表
act_hi_attachment 歷史附件表
act_hi_comment 歷史意見表
act_hi_detail 歷史詳情表,提供歷史變量的查詢
act_hi_identitylink 歷史流程用戶信息表
act_hi_procinst 歷史流程實例表
act_hi_taskinst 歷史任務實例表
act_hi_varinst 歷史變量表
act_evt_log 流程引擎的通用事件日志記錄表
act_procdef_info 流程定義的動態變更信息

3、Acticiti核心類介紹

類名 類說明
ProcessEngine 流程引擎的抽象,可以通過此類獲取流程引擎需要的所有服務。
Service類 通過ProcessEngine獲取,Activiti將不同生命周期的服務封裝在不同Service中,包括定義、部署、運行。通過服務類可獲取相關生命周期中的服務信息。
taskService 流程運行過程中,每個任務節點的相關操作接口,如complete,delete,delegate等。
RepositoryService 流程定義和部署相關的存儲服務
RuntimeService 流程運行時相關的服務,如根據流程好啟動流程實例startProcessInstanceByKey。
HistoryService 歷史記錄相關服務接口。
ProcessRuntime Process相關功能封裝,方便使用,@PreAuthorize("hasRole('ACTIVITI_USER')")
TaskRuntime taskService封裝,方便使用,限制權限

3、使用流程介紹

微信截圖_20220425165226.png

資源類似java中的類,啟動實例就是類的實例化。

3.1、 部署流程

 /**
     * 部署流程
     */
      repositoryService.createDeployment()
.addClasspathResource("bpm/askForLeaveBpm.bpmn")
.addClasspathResource ("bpm/test.png")
                .name("請假流程")
                .key("ASK_FOR_LEAVE_ACT")
                .deploy();

        System.out.println("流程部署成功!");

3.1、啟動一個流程實例

/**
     * 啟動流程實例
     */
    public void startProcess() {
        String processDefinitionKey = "ASK_FOR_LEAVE_ACT";
        Map map = new HashMap<> ();
        
        //使用UEL 表達式設置
        
        // 學生填寫申請單    Assignee:${student}
        map.put ("student", "lucy");

        // 班主任審批    Assignee:${teacher}
        map.put ("teacher", "jack");

        ProcessInstance instance = runtimeService.startProcessInstanceByKey (processDefinitionKey, map);
        System.out.println ("流程實例ID:" + instance.getId ());
        System.out.println ("流程定義ID:" + instance.getProcessDefinitionId ());
    }

3.1、查詢當前流程中等待執行的任務

 /**
     * 任務查詢
     */
    public List searchTask() {
        //流程啟動后,各各任務的負責人就可以查詢自己當前需要處理的任務,查詢出來的任務都是該用戶的待辦任務。
        List list = taskService.createTaskQuery ()
                //流程實例key
                .processDefinitionKey ("test01")
                //查詢誰的任務
                //.taskAssignee("")
                .list ();
        List idList = new ArrayList ();

        for (Task task : list) {
            idList.add (task.getId ());
            System.out.println ("任務ID:" + task.getId ());
            System.out.println ("任務名稱:" + task.getName ());
            System.out.println ("任務的創建時間:" + task.getCreateTime ());
            System.out.println ("任務的辦理人:" + task.getAssignee ());
            System.out.println ("流程實例ID:" + task.getProcessInstanceId ());
            System.out.println ("執行對象ID:" + task.getExecutionId ());
            System.out.println ("流程定義ID:" + task.getProcessDefinitionId ());
        }

        return idList;

    }
查詢.png

3.1、處理任務

/**
     * 處理任務
     */
    public void disposeTask(List list) {
        for (String id : list) {
            // 任務id
            taskService.complete (id);
            System.out.println ("處理任務id:" + id);
        }
    }
審批.png

4、禁用springsecurity

Activiti7默認集成springsecurity權限模塊,啟動服務訪問模塊時,瀏覽器會彈出一個登錄界面,可通過一下設置禁用。

@SpringBootApplication(
        exclude = {
                org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
                org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
        })
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,622評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,716評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,746評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,991評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,706評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,036評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,029評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,203評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,725評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,451評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,677評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,161評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,857評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,266評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,606評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,407評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,643評論 2 380

推薦閱讀更多精彩內容