1. 程式人生 > 其它 >drools中使用全域性變數

drools中使用全域性變數

一、背景

在我們編寫drools的規則檔案的時候,有些時候需要用到全域性變數,那麼這個該怎麼實現呢?有哪些注意事項呢?

二、前置知識

1、語法結構

2、全域性變數的特點

  1. 使用global來定義全域性變數,它可以為規則提供資料和服務
  2. 全域性變數並不會被寫入到工作記憶體中,因此我們不可放到規則的約束條件中,即when的後面,除非這個全域性變數是常量
  3. 如果不同的包中存在相同識別符號的常量,那麼我們的常量必須是相同的型別,以便可以引用到相同的值。官網原文: If you declare global variables with the same identifier in multiple packages, then you must set all the packages with the same type so that they all reference the same global value.
  4. 儘量不要使用全域性變數在規則之間傳遞引數,如果需要在規則之間傳遞引數,我們應該向工作記憶體中插入Fact物件。

三、需求

規則檔案中定義常量,然後java程式碼中設定常量的值。

四、實現

得到結論:
1、資料型別需要一致。
2、常量是KieSession級別隔離的。

五、程式碼實現

https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-drl-global-variable

六、參考連結

https://docs.drools.org/7.69.0.Final/drools-docs/html_single/index.html#drl-globals-con_drl-rules