Java基于drools做规则校验的实现
作者:编程经验分享
工作中需要开发一个规则服务,提供各种规则,本文主要介绍了Java基于drools做规则校验的实现,具有一定的参考价值,感兴趣的可以了解一下
需求
工作中需要开发一个规则服务,提供各种规则,每条规则由不同的校验条件以及返回值构成。配置好的规则可以提供给其他服务使用,做各种业务校验。
实现
基于drools规则引擎实现
根据不同的规则,可以动态地生成不同的drl
客户端传参,提供相应的条件值
得到drl和输入参数后,便可以用 drools 来校验规则是否通过,以及通过后相应的业务处理了
代码
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) { //业务代码处理后得到的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); //校验的条件值 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(); } }
到此这篇关于Java 基于 drools 做规则校验的文章就介绍到这了,更多相关Java 基于 drools 做规则校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!