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 做规则校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
IDEA Ui设计器JFormDesigner 永久激活插件+注册机(亲测一直在用)
这篇文章主要介绍了IDEA Ui设计器JFormDesigner 永久激活----插件+注册机 自己一直在用的版本和注册机,非常不错,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下2022-08-08Spring Boot 2.x中Actuator的一些知识点
这篇文章主要给大家介绍了关于Spring Boot 2.x中Actuator的一些知识点,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot 2.x具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧2019-09-09spring-boot-maven-plugin:unknown的完美解决方法
这篇文章主要介绍了spring-boot-maven-plugin:unknown的完美解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-11-11
最新评论