Drools是一款基于Java的優秀的規則引擎,将複雜多變的業務規則從寫死中解放出來,以規則腳本的形式存放在檔案中,使得修改規則不需要改動代碼重新開機服務就能生效。
Drools有一定的學習成本,官方英文文檔非常詳細,但中文文檔少,本文将通過一篇文章來介紹Drools的使用和動态部署,這也是我學習過後的總結,希望對你入門Drools有幫助。
官網位址:https://www.drools.org/
github: https://github.com/kiegroup/drools
簡單使用
一個給不同商品設定不同折扣的例子
pom.xml
kmodule.xml
檔案用于配置規則腳本,可以有多個kbase
檔案放在項目resources/
META-INF
目錄下可以自動加載
Product Bean實體
resources/rules/
Rules.drl
規則腳本
junit Test
運作結果
解釋一下
kmodule.xml
- 該檔案用來配置規則表,可以包含多個kbase,每個kbase都有name屬性,不能重複
- kbase可以包含多個ksession, packages屬性是src/main/resources目錄下檔案夾的包路徑,可以定義多個包,逗号分隔,packages目錄下的所有規則檔案都會被加載,除了子目錄
- ksession 的name不能重複,Java代碼中KieSession設定的name就是該配置的name
droolsTest
- KieServices 該接口提供了很多方法,可以通過這些方法通路KIE關于建構和運作的相關對象,比如說可以擷取KieContainer,利用KieContainer來通路KBase和KSession等資訊;可以擷取KieRepository對象,利用KieRepository來管理KieModule等。 KieServices就是一個中心,通過它來擷取的各種對象來完成規則建構、管理和執行等操作。
- KieContainerKieContainer可以了解為是一個KieBase的容器。
- KieBase KieBase可以了解為是一個知識倉庫,包含了若幹的規則、流程、方法等,在Drools中主要就是規則和方法,KieBase本身并不包含運作時的資料之類的,如果需要執行規則KieBase中的規則的話,就需要根據KieBase建立KieSession。
- KieSessionKieSession就是一個跟Drools引擎打交道的會話,其基于KieBase建立,它會包含運作時資料,包含“事實 Fact”,并對運作時資料事實進行規則運算。我們通過KieContainer建立KieSession是一種較為友善的做法,其實他本質上是從KieBase中建立出來
動态規則
實作動态規則有這幾種思路
1. 使用Workbench,通過Web管理頁面動态生成配置規則
2. 将規則以字元串的形式存入資料庫,需要自己開發一套規則管理系統
使用Wrokbench
1.docker部署workbench
workbench
docker run -p 8080:8080 -p 8001:8001 -d --name drools-wb jboss/drools-workbench-showcase:7.5.0.Final
kie-server
docker run -p 8180:8180 -d --name kie-server --link drools-wb:kie_wb jboss/kie-server-showcase:7.5.0.Final
通路http://ip位址:8080/drools-wb
預設賬号/密碼 admin/admin

2.建立項目
3.建立Object
4.建立DRL檔案
5.部署
6.使用部署的規則檔案
遠端規則Maven倉庫位址擷取
本地Maven倉庫settings.xml配置,這裡隻摘錄了需要添加的3處,需要對應去添加
建立一個标準的SpringBoot工程
Product
實體,包路徑要跟規則檔案中的一緻
DroolsController.java
PostMan通路接口
與DRL規則檔案中配置的一緻
7.動态規則
修改
ppdrl.drl
規則表,修改GOLD的打折為50%,儲存規則,将項目版本提高一個版本,并
build&deploy
項目
再次通路接口,GOLD的折扣已經變為50%
,其中沒有重新開機服務