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 做规则校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • 在非Spring管理对象中注入Spring Bean的解决方案

    在非Spring管理对象中注入Spring Bean的解决方案

    在SpringBoot开发中,我们习惯了通过@Autowired/@Resource等注解轻松注入依赖 Bean,但在WebSocket、定时任务等场景下,会遇到一个核心问题:非Spring创建的对象无法直接注入 Spring Bean,所以本文给大家介绍了在非Spring管理对象中注入Spring Bean的解决方案
    2026-02-02
  • SpringBoot实现消息推送功能的示例代码

    SpringBoot实现消息推送功能的示例代码

    项目开发中,实时消息推送已成为提升用户体验的关键技术,无论是聊天应用、通知系统、实时数据展示,还是协同办公场景,都需要服务器能够主动向客户端推送消息,本文将详细介绍SpringBoot实现消息推送功能的具体指南,需要的朋友可以参考下
    2025-12-12
  • Java中SimpleDateFormat方法超详细分析

    Java中SimpleDateFormat方法超详细分析

    这篇文章主要给大家介绍了关于Java中SimpleDateFormat方法超详细分析的相关资料,SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 基于Spring Boot 的小区人脸识别与出入记录管理系统功能

    基于Spring Boot 的小区人脸识别与出入记录管理系统功能

    文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型设计、接口开发与系统优化方案,为智慧社区提供高效安全管理工具,感兴趣的朋友跟随小编一起看看吧
    2025-08-08
  • spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推荐)

    spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息(推

    这篇文章主要介绍了spring boot里增加表单验证hibernate-validator并在freemarker模板里显示错误信息的相关资料,需要的朋友可以参考下
    2018-01-01
  • Spring的Eureka续约(心跳检测)详解

    Spring的Eureka续约(心跳检测)详解

    这篇文章主要介绍了Spring的Eureka续约(心跳检测)详解,eureka client每隔一定的时间,会给eureka server发送心跳,保持心跳,让eureka server知道自己还活着,需要的朋友可以参考下
    2023-11-11
  • Java将Word文件转为OFD文件

    Java将Word文件转为OFD文件

    大家好,本篇文章主要讲的是Java将Word文件转为OFD文件,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 一种新的日期处理方式之JavaScript Temporal API

    一种新的日期处理方式之JavaScript Temporal API

    JavaScript Temporal API是一种为Web开发人员提供了一种新的处理日期和时间数据类型的方式。它的目的是使操作日期和时间更加简单和可靠,而且不用担心历史时区问题或全球化协调时间(UTC)之类的问题,感兴趣的同学可以参考阅读
    2023-05-05
  • java 输入某年某月某日,判断这一天是这一年的第几天

    java 输入某年某月某日,判断这一天是这一年的第几天

    这篇文章主要介绍了java 输入某年某月某日,判断这一天是这一年的第几天,需要的朋友可以参考下
    2017-02-02
  • Spring Boot修改启动端口的方法

    Spring Boot修改启动端口的方法

    下面小编就为大家带来一篇Spring Boot修改启动端口的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论