CompileFlow 使用

CompileFlow簡介

compileflow是一個非常輕量、高性能、可集成、可擴展的流程引擎。
compileflow Process引擎是淘寶工作流TBBPM引擎之一,是專注于純內(nèi)存執(zhí)行,無狀態(tài)的流程引擎,通過將流程文件轉(zhuǎn)換生成java代碼編譯執(zhí)行,簡潔高效。
compileflow很多地方用到了QlExpress,建議先學(xué)習(xí)下QlExpress,我有篇介紹qlexpress使用的文檔,http://www.itdecent.cn/p/a3ff29cf579d

快速上手

有一個demo項目,地址如下https://github.com/compileflow/compileflow-demo, 然后用idea打開,如果idea沒有把這個當(dāng)作maven項目的話,找到pom.xml右鍵,"Add as Maven Project"。
這個demo項目中有一個ktv唱歌的例子,如果價格大于等于300的話打九折,否則不打折。
然后啟動DemoApplication,端口是7001。
然后可以分別請求localhost:7001/run,localhost:7001/run2觀察結(jié)果。然后可以自己在RunCase中寫個run3,因為run是4個人唱ktv,每個人30,總價是120,在ktvExample.bpm中定義了一個decision節(jié)點,大于300的話打九折。

  • RunCase中增加方法run3
public void run3() {
    //code在bpm文件中定義
    String code = "bpm.ktvExample";

    //執(zhí)行流程的入?yún)?    Map<String, Object> context = new HashMap<>();
    List<String> pList = new ArrayList<>();
    pList.add("a1");
    pList.add("a2");
    pList.add("a3");
    pList.add("a4");
    pList.add("a5");
    pList.add("a6");
    pList.add("a7");
    pList.add("a8");
    pList.add("a9");
    pList.add("a10");
    pList.add("a11");
    context.put("pList", pList);

    try {
        ProcessEngine processEngine = ProcessEngineFactory.getProcessEngine();
        Map<String, Object> result = processEngine.start(code, context);
        System.out.println(result.get("price"));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  • DemoController增加一個請求
@RequestMapping("/run3")
public String run3() {
    runCase.run3();
    return "Run ok.";
}

請求localhost:7001/run3,可以發(fā)現(xiàn)已經(jīng)打了9折了。

安裝compile-flow idea插件

插件最新安裝包下載,下載地址:compileflow-idea-designer.zip 如果你是idea的2020版本及以上的,請下載這個:compileflow-idea-designer.for.2020.up.zip
然后idea -> Preferences -> Plugins,選擇install from disk, 重啟就行了

compile-flow idea插件使用

然后打開bpm文件,比如我打開了ktvExample.bpm
可以看到有三個tab欄,分別是Text,java code,process-flow
可以在process-flow中進(jìn)行編輯流程圖

截屏2021-01-19 上午11.28.28.png
截屏2021-01-19 上午11.28.28.png

更詳細(xì)的使用見 https://github.com/alibaba/compileflow-idea-designer/blob/master/README_CN.md

bpm規(guī)范

這個github上項目的文檔已經(jīng)寫的很好了,直接點擊鏈接查看吧。
協(xié)議詳解
看過這個后,對于Text中的xml描述流程會有更好的了解。更詳細(xì)的可以參見complieflow的TBBPM.xsd文檔

進(jìn)階使用

預(yù)先加載bpm流程到內(nèi)存

通過processEngine.load方法預(yù)先將bpm流程加載到內(nèi)存

@Component
@Configuration
public class BpmInitializer implements InitializingBean {

    @Override
    public void afterPropertiesSet() throws Exception {
        ProcessEngine processEngine = ProcessEngineFactory.getProcessEngine();
        processEngine.load("bpm.ktvExample");
        processEngine.load("bpm.sqrt");
    }

    @Bean
    public SpringApplicationContextProvider getSpringApplicationContextProvider() {
        return new SpringApplicationContextProvider();
    }

}

獲取bpm對應(yīng)的code

獲取java code

System.out.println(processEngine.getJavaCode(code));

獲取test code

System.out.println(processEngine.getTestCode(code));

使用BPMN

默認(rèn)使用的是TBBPM,如果需要使用BPMN的話,compileflow的源碼的test有示例

final ProcessEngine processEngine = ProcessEngineFactory.getStatelessProcessEngine(FlowModelType.BPMN);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用到的組件 1、通過CocoaPods安裝 2、第三方類庫安裝 3、第三方服務(wù) 友盟社會化分享組件 友盟用戶反饋 ...
    SunnyLeong閱讀 15,156評論 1 180
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)、焦點、注意力、語言聯(lián)想、情景聯(lián)想 觀點: 1.統(tǒng)計學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會...
    Jenaral閱讀 5,962評論 0 5
  • 昨天,在回家的路上,坐在車?yán)镉圃沼圃盏乜粗摹度龉衬墓适隆?,我被里面的?nèi)容深深吸引住了,盡管上學(xué)時...
    夜闌曉語閱讀 3,935評論 2 9
  • 一。匹配。 判斷一個字符串是否符合我們制定的規(guī)則? 二…捕獲 字符串中符合我們正則表達(dá)式,規(guī)則的,內(nèi)容捕獲到。 三...
    時修七年閱讀 1,054評論 2 0
  • 城空了,有樹長出來 我的城死了 鑄起它的人,殺死它的人 不愿因為這件事而驕傲 一座城的終結(jié) 永遠(yuǎn)因為終結(jié)這件事而顯...
    于十六閱讀 3,074評論 6 17

友情鏈接更多精彩內(nèi)容