Java基于drools做規(guī)則校驗(yàn)的實(shí)現(xiàn)
需求
工作中需要開發(fā)一個(gè)規(guī)則服務(wù),提供各種規(guī)則,每條規(guī)則由不同的校驗(yàn)條件以及返回值構(gòu)成。配置好的規(guī)則可以提供給其他服務(wù)使用,做各種業(yè)務(wù)校驗(yàn)。
實(shí)現(xiàn)
基于drools規(guī)則引擎實(shí)現(xiàn)
根據(jù)不同的規(guī)則,可以動(dòng)態(tài)地生成不同的drl
客戶端傳參,提供相應(yīng)的條件值
得到drl和輸入?yún)?shù)后,便可以用 drools 來校驗(yàn)規(guī)則是否通過,以及通過后相應(yīng)的業(yè)務(wù)處理了
代碼
pom
<dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>7.37.0.Final</version> </dependency>
使用示例
public class DynamicRule { public static void main(String[] args) { //業(yè)務(wù)代碼處理后得到的drl String drl = "import java.util.Map;\n" + "import java.util.HashMap;\n" + "import java.util.List;\n" + "import java.util.ArrayList;\n" + "global java.util.HashMap returnObj\n" + "rule \"test\"\n" + "when\n" + " $m : Map()\n" + " $o : Object($m[\"name\"].equals(\"abc\") && $m[\"age\"] >= 18)\n" + "then\n" + " System.out.println($m);\n" + " returnObj.put(\"result\", true);\n" + "end"; KieSession kieSession = getKieSession(drl); Map<String, Object> returnObj = new HashMap<>(); kieSession.setGlobal("returnObj", returnObj); //校驗(yàn)的條件值 Map<String, Object> data = new HashMap<>(); data.put("name", "abc"); data.put("age", 17); kieSession.insert(data); kieSession.fireAllRules(); kieSession.dispose(); if (Boolean.TRUE.equals(returnObj.get("result"))) { System.out.println("success"); } else { System.out.println("fail"); } } public static KieSession getKieSession(String drl) { KieHelper kieHelper = new KieHelper(); kieHelper.addContent(drl, ResourceType.DRL); return kieHelper.build().newKieSession(); } }
到此這篇關(guān)于Java 基于 drools 做規(guī)則校驗(yàn)的文章就介紹到這了,更多相關(guān)Java 基于 drools 做規(guī)則校驗(yàn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解快速排序算法中的區(qū)間劃分法及Java實(shí)現(xiàn)示例
這篇文章主要介紹了詳解快速排序算法中的區(qū)間劃分法及Java實(shí)現(xiàn)示例,文中分別介紹了快排時(shí)兩種區(qū)間劃分的思路,需要的朋友可以參考下2016-04-04SpringBoot設(shè)置Json返回字段為非空問題
這篇文章主要介紹了SpringBoot設(shè)置Json返回字段為非空問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):順序隊(duì)列和循環(huán)隊(duì)列
下面小編就為大家分享一篇java隊(duì)列實(shí)現(xiàn)方法(順序隊(duì)列,循環(huán)隊(duì)列),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-08-08SpringMVC中的HandlerMapping和HandlerAdapter詳解
這篇文章主要介紹了SpringMVC中的HandlerMapping和HandlerAdapter詳解,在Spring MVC中,HandlerMapping(處理器映射器)用于確定請(qǐng)求處理器對(duì)象,請(qǐng)求處理器可以是任何對(duì)象,只要它們使用了@Controller注解或注解@RequestMapping,需要的朋友可以參考下2023-08-08Java畢業(yè)設(shè)計(jì)實(shí)戰(zhàn)之健身俱樂部管理系統(tǒng)的實(shí)現(xiàn)
這是一個(gè)使用了java+SSM+Mysql+Jsp開發(fā)的健身俱樂部管理系統(tǒng),是一個(gè)畢業(yè)設(shè)計(jì)的實(shí)戰(zhàn)練習(xí),具有俱樂部管理該有的所有功能,感興趣的朋友快來看看吧2022-02-02