国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

強烈推薦強大的規則引擎框架LiteFlow

開發 前端
利用LiteFlow,你可以將瀑布流式的代碼,轉變成以組件為核心概念的代碼結構,這種結構的好處是可以任意編排,組件與組件之間是解耦的,組件可以用腳本來定義,組件之間的流轉全靠規則來驅動。LiteFlow擁有開源規則引擎最為簡單的DSL語法。

環境:SpringBoot2.7.16


1. 簡介

LiteFlow是一個非常強大的現代化的規則引擎框架,融合了編排特性和規則引擎的所有特性。

在每個公司的系統中,總有一些擁有復雜業務邏輯的系統,這些系統承載著核心業務邏輯,幾乎每個需求都和這些核心業務有關,這些核心業務業務邏輯冗長,涉及內部邏輯運算,緩存操作,持久化操作,外部資源調取,內部其他系統RPC調用等等。時間一長,項目幾經易手,維護成本就會越來越高。各種硬代碼判斷,分支條件越來越多。代碼的抽象,復用率也越來越低,各個模塊之間的耦合度很高。一小段邏輯的變動,會影響到其他模塊,需要進行完整回歸測試來驗證。如要靈活改變業務流程的順序,則要進行代碼大改動進行抽象,重新寫方法。實時熱變更業務流程,幾乎很難實現。LiteFlow為解耦邏輯而生,為編排而生,在使用LiteFlow之后,你會發現打造一個低耦合,靈活的系統會變得易如反掌!

LiteFlow優勢

利用LiteFlow,你可以將瀑布流式的代碼,轉變成以組件為核心概念的代碼結構,這種結構的好處是可以任意編排,組件與組件之間是解耦的,組件可以用腳本來定義,組件之間的流轉全靠規則來驅動。LiteFlow擁有開源規則引擎最為簡單的DSL語法。十分鐘就可上手。

圖片圖片

組件可實時熱更替,也可以給編排好的邏輯流里實時增加一個組件,從而改變你的業務邏輯。

圖片圖片

LiteFlow的腳本組件,支持眾多腳本語言,完全和Java打通,你可以用腳本來實現任何邏輯。

圖片圖片

LiteFlow支持把編排規則和腳本放在數據庫,注冊中心中,還有可以任意擴展的接口,方便你定制。

圖片圖片

LiteFlow支持你能夠想象處理的任何邏輯流程,如下流程:

圖片圖片

圖片圖片

規則文件

LiteFlow支持3中格式的規則文件定義:XML,JSON,YML。以下是XML示例:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<flow>
    <chain name="example_01">
        THEN(a, b, c)
    </chain>
</flow>

規則說明

THNE:串行執行,a執行===》執行b===》執行c

WHEN:并行執行

<chain name="chain1">
    WHEN(a, b, c);
</chain>

SWITCH:選擇執行

<chain name="chain1">
    SWITCH(a).to(b, c, d);
</chain>

圖片圖片

IF:條件執行

IF二元

<chain name="chain1">
    THEN(
        IF(x, a),
        b
    );
</chain>

圖片圖片

其中x為條件節點,為真的情況下,執行鏈路就為x->a->b,為假鏈路就為x->b。

IF三元

<chain name="chain1">
    THEN(
        IF(x, a, b),
        c
    );
</chain>

圖片圖片

還有其它很多的規則,這里不一一舉例,可以查看官網。

2. 實戰案例

環境配置

<dependency>
  <groupId>com.yomahub</groupId>
  <artifactId>liteflow-spring-boot-starter</artifactId>
  <version>2.11.4.2</version>
</dependency>

配置文件

#liteflow 配置
liteflow:
  rule-source: flows/*.el.xml


整個規則流程執行如下

圖片圖片


規則定義

<?xml versinotallow="1.0" encoding="UTF-8"?>
<flow>
    <chain name="processOrder">
        THEN(
          initOrder, 
          IF(amount, discountOrder),
          SWITCH(userType).to(vipDiscountOrder, normalDiscountOrder),
          completeOrder
        )
    </chain>
</flow>

這里的initOrder,amount,discountOrder等都是具體Node接口是bean的名稱。

初始化訂單組件

@Component("initOrder")
public class InitOrderComponent extends NodeComponent {
  @Override
  public void process() {
    System.out.println("初始化訂單...") ;
    Order order = this.getContextBean(Order.class) ;
    double sum = order.getItems().stream().mapToDouble(item -> {
      return item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())).doubleValue() ;
    }).sum() ;
    order.setTotalAmount(BigDecimal.valueOf(sum));
  }
}

這里只做了計算訂單總額。

判斷訂單總額節點

@Component("amount")
public class AmountComponent extends NodeIfComponent {


  @Override
  public boolean processIf() throws Exception {
    System.out.println("判斷總金額,超過100元打折") ;
    Order order = this.getContextBean(Order.class) ;
    return order.getTotalAmount().doubleValue() >= 100D ;
  }


}

用戶類型判斷,執行哪個節點

@Component("userType")
public class UserTypeComponent extends NodeSwitchComponent {


  @Override
  public String processSwitch() throws Exception {
    User user = this.getContextBean(User.class) ;
    if (user.isVip()) {
      return "vipDiscountOrder" ;
    }
    return "normalDiscountOrder" ;
  }


}

上面返回的是具體節點的beanName。

VIP折扣節點

@Component("vipDiscountOrder")
public class VIPDiscountOrderComponent extends NodeComponent {


  @Override
  public void process() {
    System.out.println("VIP會員打9折") ;
    Order order = this.getContextBean(Order.class) ;
    order.setTotalAmount(order.getTotalAmount().multiply(BigDecimal.valueOf(9)).divide(BigDecimal.valueOf(10), RoundingMode.HALF_UP)) ;
  }
}

普通會員折扣節點

@Component("normalDiscountOrder")
public class NormalDiscountOrderComponent extends NodeComponent {


  @Override
  public void process() {
    System.out.println("普通會員不打折") ;
  }
}

完成節點

@Component("completeOrder")
public class CompleteOrderComponent extends NodeComponent  {


  @Override
  public void process() throws Exception {
    System.out.println("訂單折扣執行完成,最后收尾...") ;
  }


}

以上是該規則流程的所有配置及定義。接下來進行測試

// 直接注入該類進行規則流程的啟動執行
@Resource
private FlowExecutor flowExecutor;


@Test
public void testExample02() {
  Order order = new Order() ;
  order.setId(1L) ;
  order.setSno("S001") ;
  List<OrderItem> items = new ArrayList<>() ;
  items.add(new OrderItem(1L, 2, BigDecimal.valueOf(22))) ;
  items.add(new OrderItem(2L, 1, BigDecimal.valueOf(24.5))) ;
  items.add(new OrderItem(3L, 5, BigDecimal.valueOf(66.3))) ;
  order.setItems(items) ;
  User user = new User() ;
  user.setId(1L) ;
  user.setVip(false) ;
  LiteflowResponse response = flowExecutor.execute2Resp("processOrder", null, order, user);
  if (!response.isSuccess()) {
    Exception e = response.getCause() ;
    e.printStackTrace() ;
  } else {
    System.out.println("流程成功執行...") ;
    System.out.println("最終應付款:" + response.getContextBean(Order.class).getTotalAmount().doubleValue()) ;
  }
}

控制臺將會輸出詳細的信息。

圖片圖片

修改用戶類型后執行

圖片圖片

以上是本篇文章的全部內容,希望對你有所幫助。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2023-12-22 14:09:08

AI文本編輯器AiEditor

2020-02-24 10:06:43

Mac軟件工具

2025-03-26 04:00:01

2023-07-10 08:44:00

2009-11-04 13:12:33

VB.NET繼承類

2011-06-30 17:41:46

SEO

2011-05-16 08:37:56

JavaScript庫

2011-04-21 14:42:46

CSSHTML工具

2012-02-03 15:13:27

JavaScript

2025-08-15 12:19:08

2025-05-13 04:15:00

2011-07-06 13:38:42

Web

2012-06-14 11:14:14

運維Firefox插件

2014-04-11 13:12:10

前端技能前端必備

2020-02-16 10:45:30

Chrome數據火狐

2022-05-16 09:20:00

開發工具

2020-12-17 05:52:09

線程池ThreadPoolThreadPoolE

2022-09-07 11:38:04

async代碼前端

2009-11-04 13:46:36

ADO.NET數據庫

2023-12-07 19:13:48

Pythonprint
點贊
收藏

51CTO技術棧公眾號

激情欧美一区二区| 成人性生交免费看| 国产精品一二| 精品日韩一区二区| 国产视频网站在线| 国产视频精品久久久| 亚洲伊人春色| 精品99在线视频| 亚洲精品aⅴ中文字幕乱码| 欧美日韩激情在线一区二区三区| 午夜精品一区二区在线观看的| 国产精品成人一区二区三区夜夜夜| a中文在线播放| 国产精品最新在线观看| 中文字幕不卡的av| 亚洲人av在线| 欧美一级片免费在线| 午夜性色一区二区三区免费视频| 久久9精品区-无套内射无码| 国产精品地址| 日本一区二区黄色| 亚洲人成伊人成综合网久久久| 国产亚洲精品bv在线观看| 久久国产精品高清一区二区三区| 九九热精品在线| 天天综合网91| 亚洲熟妇无码一区二区三区导航| 欧美videossexotv100| 看电视剧不卡顿的网站| 国产一区二区三区四区五区3d | 成人免费福利视频| 欧美成人久久| 日韩av手机版| 国产男人精品视频| 中文字幕在线一区免费| 日韩中文字幕| 不卡av电影在线观看| 亚洲黄网站黄| xxxx在线视频| 国产一二三四在线视频| 国产福利精品av综合导导航| 欧美午夜影院一区| 婷婷综合在线| 国产在线激情视频| 伊人网在线免费| 国产精品日韩在线播放| 精品一区二区三区免费观看| 看亚洲a级一级毛片| 992tv在线观看免费进| 亚洲成年人专区| 欧美一级视频在线观看| 色综合久久精品| 亚洲伦理一区二区| 亚洲高清视频一区二区| 精品视频在线播放色网色视频| 99久久夜色精品国产网站| 欧美成人基地| free欧美| 国产黄色在线网站| 少妇高潮大叫好爽喷水| 久久久久久久999| 日韩三级.com| 福利视频导航一区| 91麻豆产精品久久久久久| 欧美 日韩 国产 一区| 丁香久久综合| 日韩毛片在线一区二区毛片| 亚洲久久久久久久久久久| 久久精品一区二区国产| 国产精品丝袜在线播放| 导航福利在线| 国产精品wwwww| 欧美日韩精品一区二区天天拍小说| 久久狠狠亚洲综合| 国产精品99视频| 国产精品实拍| 成人软件网18免费视频| 久久久无码中文字幕久...| 成人久久一区二区三区| 欧美中文字幕第一页| 中文字幕日韩免费视频| 欧美午夜性色大片在线观看| 亚洲日韩欧美一区二区在线| 91精品国产成人观看| 久久综合色占| 亚洲成人精品综合在线| 欧美黄页免费| 麻豆网站在线观看| 黄色软件在线观看| 最近中文字幕mv免费高清在线| 日韩免费视频播放| 欧美性生活影院| 欧美熟乱第一页| 亚洲欧美日韩国产中文在线| 国产精品美女久久久久久久网站| 久久久久久久久97黄色工厂| 激情偷乱视频一区二区三区| aaa级精品久久久国产片| 成人免费观看av| 亚洲图色一区二区三区| 99久久999| 久久亚洲精精品中文字幕| 欧美aaaaaaaa| 亚洲精品小区久久久久久| 日韩精品亚洲专区在线观看| 成在在线免费视频| 综合久久2o19| 超碰电影在线播放| 成年人黄视频在线观看| wwwav91com| 黄a大片av永久免费| 免费黄色在线视频网站| xxx欧美xxx| 青青国产在线| 中文字幕第21页| 污黄色在线观看| 日韩免费福利视频| 国产大片一区| 99re这里只有精品6| 亚洲成人动漫av| 欧美一二三区在线观看| 国产91|九色| 秋霞在线一区二区| 深夜福利视频在线观看| 欧美在线一级| 五月天婷婷综合社区| 成人在线免费看黄| 天堂俺去俺来也www久久婷婷 | 日本乱人伦a精品| 岛国av在线一区| 亚洲综合精品| 欧美日韩色婷婷| 欧美多人爱爱视频网站| 亚洲一区二区三区精品视频| 精东影业在线观看| 精品一区91| 国产91丝袜在线播放0| 欧美高清精品3d| 五月婷婷色综合| 亚洲电影天堂av| 亚洲日韩中文字幕在线播放| 欧美日韩一区小说| 欧美丰满少妇xxxxx| 在线观看17c| 欧美aaaaaaa| 国产一区成人| 久久综合色之久久综合| 亚洲色图视频网| 欧美精品www在线观看| 欧美精品无码一区二区三区| 国产精品亚洲一区二区三区在线观看| 亚洲视频1区| 亚洲女厕所小便bbb| 91成人在线视频| 九七影院97影院理论片免费| 伊人久久影院| 国产欧美日韩久久| 97精品一区二区视频在线观看| 九色porny91| 成人精品一区二区三区电影| 伊人成人在线视频| 日本精品一区二区三区四区的功能| 高清欧美电影在线| 性视频在线播放| 国产视频网站一区二区三区| 欧美专区一区二区三区| 91精品蜜臀在线一区尤物| 国产精品美女xx| 中文字幕伦理免费在线视频 | 日韩欧美三级电影| 欧美裸体视频| 麻豆视频一区二区| 亚洲一区二区国产| 男人日女人视频网站| 成人日韩视频| 欧美午夜性色大片在线观看| 你懂的网址一区二区三区| 久久99精品国产麻豆婷婷| 国产欧美日韩电影| 亚洲欧洲一区二区三区| 欧美极品美女视频网站在线观看免费| 国产黄页在线观看| 素人啪啪色综合| 国产精品视频看| 日韩成人免费看| 亚洲人成毛片在线播放| 少妇一级淫免费放| 亚洲日本国产| 亚洲一区二区三区国产| 欧洲一区二区在线 | 国产日韩精品在线| 亚洲男人av| 国产91精品一区二区| 亚洲成人精品久久| 亚洲v国产v在线观看| 欧美人与禽猛交乱配| 久久免费电影网| 亚洲视频精品一区| 欧美激情日韩| 国产成+人+综合+亚洲欧洲 |