Drools规则引擎使用
Drools
- Drools語(yǔ)法
- 規(guī)則文件
- package
- import
- rule
- 操作符
- Drools方法定義
- Drools聲明類型
- Drools關(guān)鍵詞
- 引用
Drools語(yǔ)法
規(guī)則文件
規(guī)則文件可以使用 .drl文件,也可以是xml文件,這里我們使用drl文件
package
對(duì)一個(gè)規(guī)則文件而言,package是必須定義的,必須放在規(guī)則文件第一行,package的名字是隨意的,不必必須對(duì)應(yīng)物理路徑,跟java的package的概念不同,這里只是邏輯上的一種區(qū)分
如:
package com.sankuai.meituan.waimai.drools.demo
import
導(dǎo)入規(guī)則文件需要使用到的外部規(guī)則文件或者變量,這里的使用方法跟java相同,但是不同于java的是,這里的import導(dǎo)入的不僅僅可以是一個(gè)類,也可以是這個(gè)類中的某一個(gè)可訪問(wèn)的靜態(tài)方法
import com.drools.demo.point.PointDomain;
rule
定義一個(gè)具體規(guī)則。rule “ruleName”。一個(gè)規(guī)則可以包含三個(gè)部分:
屬性部分: 定義當(dāng)前規(guī)則執(zhí)行的一些屬性等,比如是否可被重復(fù)執(zhí)行、過(guò)期時(shí)間、生效時(shí)間等。條件部分(LHS): 定義當(dāng)前規(guī)則的條件,如 when Message(); 判斷當(dāng)前workingMemory中是否存在Message對(duì)象。結(jié)果部分(RHS): 即當(dāng)前規(guī)則條件滿足后執(zhí)行的操作,可以直接調(diào)用Fact對(duì)象的方法來(lái)操作應(yīng)用。這里可以寫普通java代碼rule部分
rule “ruleName”
no-loop true
end
規(guī)則詳情
屬性詳情
rule attributes
條件部分- LHS
操作符
contains: 對(duì)比是否包含操作,操作的被包含目標(biāo)可以是一個(gè)復(fù)雜對(duì)象也可以是一個(gè)簡(jiǎn)單的值Person( fullName not contains "Jr" )not contains:與contains相反。memberOf:判斷某個(gè)Fact屬性值是否在某個(gè)集合中,與contains不同的是他被比較的對(duì)象是一個(gè)集合,而contains被比較的對(duì)象是單個(gè)值或者對(duì)象CheeseCounter( cheese memberOf $matureCheeses )not memberOf:與memberOf正好相反matches:正則表達(dá)式匹配Cheese( type matches "(Buffalo)?\\S*Mozarella" )注意: 就像在Java中,寫為字符串的正則表達(dá)式需要轉(zhuǎn)義“\”not matches:與matches正好相反結(jié)果部分- RHS
當(dāng)規(guī)則條件滿足,則進(jìn)入規(guī)則結(jié)果部分執(zhí)行,結(jié)果部分可以是純java代碼
then: thenSystem.out.println("OK"); //會(huì)在控制臺(tái)打印出ok end insert:往當(dāng)前workingMemory中插入一個(gè)新的Fact對(duì)象,會(huì)觸發(fā)規(guī)則的再次執(zhí)行,除非使用no-loop限定 update:更新 modify:修改,與update語(yǔ)法不同,結(jié)果都是更新操作 retract:刪除 rule "Rule 03" when $number : Number( ) not Number( intValue < $number.intValue ) then System.out.println("Number found with value: " + $number.intValue() ); retract( $number ); endDrools方法定義
functionfunction String hello(String name) {
return “Hello “+name+”!”;
}
Drools聲明類型
declare:聲明類型聲明Class、Enum etc類型聲明元數(shù)據(jù)聲明類類型
declare Address number : int streetName : String city : String end聲明枚舉類型
declare enum DaysOfWeekSUN("Sunday"),MON("Monday"),TUE("Tuesday"),WED("Wednesday"),THU("Thursday"),FRI("Friday"),SAT("Saturday"); fullName : String endDrools關(guān)鍵詞
| lock-on-active | ||
| date-effective | ||
| date-expires | ||
| no-loop | ||
| auto-focus | ||
| activation-group | ||
| agenda-group | ||
| ruleflow-group | ||
| entry-point | ||
| duration | ||
| package | ||
| import | ||
| dialect | ||
| salience | ||
| enabled | ||
| attributes | ||
| rule | ||
| extend | ||
| when | ||
| then | ||
| when | ||
| template | ||
| query | ||
| declare | ||
| function | ||
| eval | ||
| not | ||
| in | ||
| or | ||
| and | ||
| exists | ||
| forall | ||
| exists | ||
| accumulate | ||
| collect | ||
| from | ||
| action | ||
| reverse | ||
| result | ||
| end | ||
| over | ||
| init |
引用
官方文檔
總結(jié)
以上是生活随笔為你收集整理的Drools规则引擎使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java-String类
- 下一篇: LitePal 二