Drools規則引擎入門指南(二)
本篇部落格主要講解Drools常用的屬性以及函式
屬性
首先我們在resources\rules資料夾下建立一個Property.drl,還有一個DroolsApplicationPropertyTests
1. salience優先順序
salience 屬性的值預設為0,它的值越大執行的優先順序就越高,看如下程式碼在執行的時候就會先執行salience2
1 |
rule "salience2" |
1 |
|
2. date-effective日期比較(小於等於)
當系統時間小於等於date-effective的值是才會執行。
1 |
rule "dateEffective" |
1 |
|
由於今天是11月24,所以上方的dateEffectiveTomorrow將不會執行。
還有需要注意的是Drools預設的時間格式是dd-MMM-yyyy的,也就是說你必須使用24-十一月-2018它才能識別,我為什麼能使用yyyy-MM-dd呢,請參考上篇文章中進行自動配置時的getKieServices()方法
3. date-expires日期比較(大於)
剛好於date–effective相反
4. enabled
當一個規則的enabled屬性變為false時這條規則將不再可用
1 |
rule "enabled" |
1 |
|
函式
接著我們在resources\rules資料夾下建立一個Function.drl,還有一個DroolsApplicationFunctionTests
Drools中常用函式分別為insert、update和retract,分別是插入更新和刪除,我們來看一下下方的幾個規則的執行過程
1 |
rule "test1" |
可用看的,test1規則沒有判斷條件,所以直接被執行,執行過程中它生成了一個物件插入到工作記憶體中,此物件的規則又恰好與test2規則匹配,所以緊接著test2執行,test2執行時更新了user物件,更新後的物件又匹配了test3,所以test3繼續執行。執行完畢後user物件被刪除,test4就執行不了了。
另外還有幾個方法也是常用的:
- getWorkingMemory,獲取當前的WorkingMemory物件
- halt,執行完當前規則後不再執行其他規則
- getRule,獲取當前規則物件
本文所有原始碼:https://github.com/shiyujun/drools
本文出自http://zhixiang.org.cn/,轉載請保留