Java基于drools做规则校验的实现

 更新时间:2024年03月07日 08:28:44   作者:编程经验分享  
工作中需要开发一个规则服务,提供各种规则,本文主要介绍了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 永久激活插件+注册机(亲测一直在用)

    这篇文章主要介绍了IDEA Ui设计器JFormDesigner 永久激活----插件+注册机 自己一直在用的版本和注册机,非常不错,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Java字符编码简介_动力节点Java学院整理

    Java字符编码简介_动力节点Java学院整理

    这篇文章主要介绍了Java字符编码简介,本文主要包括以下几个方面:编码基本知识,Java,系统软件,url,工具软件等,感兴趣的朋友一起看看吧
    2017-08-08
  • Spring Boot 2.x中Actuator的一些知识点

    Spring Boot 2.x中Actuator的一些知识点

    这篇文章主要给大家介绍了关于Spring Boot 2.x中Actuator的一些知识点,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot 2.x具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-09-09
  • Java之JNDI注入的实现

    Java之JNDI注入的实现

    JNDI是Java EE的重要部分,本文主要介绍了Java之JNDI注入的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • jmeter如何自动生成测试报告

    jmeter如何自动生成测试报告

    这篇文章主要介绍了jmeter如何自动生成测试报告,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 使用maven创建普通项目命令行程序详解

    使用maven创建普通项目命令行程序详解

    大部分使用maven创建的是web项目,这里使用maven创建一个命令行程序,目的是让大家了解maven特点和使用方式,有需要的朋友可以借鉴参考下
    2021-10-10
  • spring-boot-maven-plugin:unknown的完美解决方法

    spring-boot-maven-plugin:unknown的完美解决方法

    这篇文章主要介绍了spring-boot-maven-plugin:unknown的完美解决方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java加载ICC文件的方法和示例代码

    Java加载ICC文件的方法和示例代码

    ICC文件,通常用于颜色管理,定义了如何将一个颜色空间转换为另一个颜色空间,在Java中,我们可能需要加载这些文件来进行颜色转换或管理,本文将为您提供加载ICC文件的方法和示例代码,需要的朋友参考下吧
    2023-08-08
  • hystrix配置中Apollo与Archaius对比分析

    hystrix配置中Apollo与Archaius对比分析

    这篇文章主要为大家介绍了hystrix的配置中Apollo与Archaius对比分析,并为大家解答在hystrix的配置中有了Apollo是否还需要Archaius这一问题详解
    2022-02-02
  • Java Mail与Apache Mail发送邮件示例

    Java Mail与Apache Mail发送邮件示例

    这篇文章主要介绍了Java Mail与Apache Mail发送邮件示例的相关资料,需要的朋友可以参考下
    2014-10-10

最新评论