规则引擎----easy rules

这篇具有很好参考价值的文章主要介绍了规则引擎----easy rules。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、规则引擎的作用

将复杂的if else判断剥离出来

二、使用

2.1、引入POM

		<!--easy rules核心库-->
        <dependency>
            <groupId>org.jeasy</groupId>
            <artifactId>easy-rules-core</artifactId>
            <version>3.3.0</version>
        </dependency>

        <!--规则定义文件格式,支持json,yaml等-->
        <dependency>
            <groupId>org.jeasy</groupId>
            <artifactId>easy-rules-support</artifactId>
            <version>3.3.0</version>
        </dependency>

        <!--支持mvel规则语法库-->
        <dependency>
            <groupId>org.jeasy</groupId>
            <artifactId>easy-rules-mvel</artifactId>
            <version>3.3.0</version>

2.2、编写规则

2.2.1、注解
package com.xx.rule.number;

import org.jeasy.rules.annotation.Action;
import org.jeasy.rules.annotation.Condition;
import org.jeasy.rules.annotation.Fact;
import org.jeasy.rules.annotation.Rule;

/**
 * @author aqi
 * @date 2023/5/6 16:03
 */
@Rule(name = "被3整除", description = "number如果被3整除,打印:number is 3", priority = 1)
public class ThreeRule {

    /**
     * Condition:条件判断注解:如果return true, 执行Action
     */
    @Condition
    public boolean isThree(@Fact("number") int number) {
        return number % 3 == 0;
    }

    /**
     * Action 执行方法注解
     */
    @Action
    public void threeAction(@Fact("number") int number) {
        System.out.println(number + ":可以被3整除");
    }
}

2.2.2、表达式
MVELRule ageRule = new MVELRule()
                .name("age rule")
                .description("判断这个人是否成年,是否可以饮酒")
                .priority(1)
                .when("person.age > 18").then("person.setAdult(true);");
2.2.3 yml配置文件
name: "alcohol rule"
description: "children are not allowed to buy alcohol"
priority: 2
condition: "person.isAdult() == false"
actions:
  - "System.out.println(\"你还未满18岁!\");"
2.2.4 组合规则
UnitRuleGroup myUnitRuleGroup = new UnitRuleGroup("myUnitRuleGroup", "组合规则");
        myUnitRuleGroup.addRule(ageRule);
        myUnitRuleGroup.addRule(alcoholRule);
2.2.5 组合规则说明
说明
UnitRuleGroup 要么应用所有规则,要么不应用任何规则(AND逻辑)
ActivationRuleGroup 它触发第一个适用规则,并忽略组中的其他规则(XOR逻辑)
ConditionalRuleGroup 如果具有最高优先级的规则计算结果为true,则触发其余规则
2.2.6 字段说明
字段 说明
name 规则名称
description 规则描述
priority 规则执行顺序,越小越先执行
condition 条件
actions 满足条件之后的执行动作

2.3、规则使用

2.3.1、注解规则使用
package com.xx;

import com.xx.rule.number.ThreeRule;
import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngine;
import org.jeasy.rules.core.DefaultRulesEngine;

public class Main {
    public static void main(String[] args) {
        // 创建规则执行引擎
        RulesEngine rulesEngine = new DefaultRulesEngine();
        // 创建规则
        Rules rules = new Rules();
        rules.register(new ThreeRule());
        // 设置参数
        Facts facts = new Facts();
        for (int i = 1; i <= 50; i++) {
            //规则因素,对应的name,要和规则里面的@Fact 一致
            facts.put("number", i);
            //执行规则
            rulesEngine.fire(rules, facts);
            System.out.println();
        }
    }
}
2.3.2、表达式和yml规则使用
package com.xx;

import com.xx.domain.Person;
import org.jeasy.rules.api.Facts;
import org.jeasy.rules.api.Rule;
import org.jeasy.rules.api.Rules;
import org.jeasy.rules.api.RulesEngine;
import org.jeasy.rules.core.DefaultRulesEngine;
import org.jeasy.rules.core.RuleBuilder;
import org.jeasy.rules.mvel.MVELRuleFactory;
import org.jeasy.rules.support.YamlRuleDefinitionReader;
import org.springframework.util.ResourceUtils;

import java.io.FileReader;

/**
 * 基于MVEL表达式实现规则引擎
 * @author aqi
 */
public class ShopMain {
    public static void main(String[] args) throws Exception {
        Person person = new Person();
        person.setName("tom");
        person.setAge(20);
        Facts facts = new Facts();
        facts.put("person", person);

        // 表达式
        Rule ageRule = new RuleBuilder()
                .name("age rule")
                .description("判断这个人是否成年,是否可以饮酒")
                .when(e -> Integer.parseInt(e.get("person.age")) > 18)
                .then(e -> e.put("person.adult", true))
                .build();


        // yml配置文件
        Rule alcoholRule = new MVELRuleFactory(new YamlRuleDefinitionReader()).
                 createRule(new FileReader(ResourceUtils.getFile("classpath:alcohol-rule.yml")));

        Rules rules = new Rules();
        rules.register(ageRule);
        rules.register(alcoholRule);

        //创建规则执行引擎,并执行规则
        RulesEngine rulesEngine = new DefaultRulesEngine();
        rulesEngine.fire(rules, facts);
        System.out.println(person);

    }
}
2.3.1、规则引擎可配参数
参数 说明
skipOnFirstAppliedRule 当一个规则成功应用时,跳过余下的规则
skipOnFirstFailedRule 当一个规则失败时,跳过余下的规则
skipOnFirstNonTriggeredRule 当一个规则未触发时,跳过余下的规则
rulePriorityThreshold 当优先级超过指定的阈值时,跳过余下的规则

通过如下方式设置文章来源地址https://www.toymoban.com/news/detail-648476.html

RulesEngineParameters parameters = new RulesEngineParameters().skipOnFirstAppliedRule(true);
        RulesEngine rulesEngine = new DefaultRulesEngine(parameters);

到了这里,关于规则引擎----easy rules的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java中的规则引擎

    Java 中的 规则 引擎为我们提供了一个以灵活且定义的方式管理和执行业务规则的框架 。这些引擎使开发人员能够在不更改核心应用程序的情况下更轻松地修改和理解规则,从而将业务逻辑与应用程序代码分开。 规则引擎旨在评估条件并根据指定规则触发操作 。它们还为我们

    2024年04月09日
    浏览(45)
  • Java动态脚本&规则引擎、计算/表达式引擎

    在日常的Java项目中,我们免不了会遇到这样的需求: 动态地获取并运行自定义脚本文件,以实现特定的功能 对数据流执行用户自定义的数据有效性、公式计算、数据处理ETL(如数据截取、拼接)等不同业务逻辑 对用户输入的代码或脚本文件进行测试、运行,确保其语法正确

    2023年04月27日
    浏览(37)
  • Java规则引擎Drools急速入门

    1.Drools规则引擎简介 (1)什么是规则引擎 ​ 全称为业务规则管理系统,英⽂名为BRMS(即 Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理

    2024年02月04日
    浏览(58)
  • 【微服务】java 规则引擎使用详解

    目录 一、什么是规则引擎 1.1 规则引擎概述 1.2 规则引擎执行过程

    2024年02月05日
    浏览(46)
  • Java中轻量级规则引擎Groovy介绍

    假如在开发一个充值功能,需要支持经常变化的充值营销活动,产品提出了以下需求: 1、根据不同季节,不同节日做不同的充值送活动,以及不定期的优惠活动。 2、还需要根据用户的等级以及用户以往的充值历史做不同的营销活动。 3、能够灵活的配置营销活动 需求很简单

    2024年02月10日
    浏览(70)
  • Java源码规则引擎:jvs-rules 8月新增功能介绍

    JVS-rules是JAVA语言下开发的规则引擎,是jvs企业级数字化解决方案中的重要配置化工具,核心解决业务判断的配置化,常见的使用场景:金融信贷风控判断、商品优惠折扣计算、对员工考核评分等各种变化的规则判断情景。 8月是收获的季节,jvs-rules在这个季节到来之时做了大

    2024年02月14日
    浏览(44)
  • Easys Excel的表格导入(读)导出(写)-----java

    可以学习一些新知识: EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel excel的一些优点和缺点 java解析excel的框架有很多 : poi jxl,存在问题:非常的消耗内存, easyexcel 我们遇到再大的excel都不会出现内存溢出的问题 能够将一个原本3M excel文件,poi来操作将会占用内存 100MB,

    2024年02月13日
    浏览(55)
  • Java 读取 Excel 表格—— Easy Excel 基本使用

    确定表头:建立对象,和表头形成映射关系。 不确定表头:每一行数据映射为 MapString, Object ,比如用户自己上传的表格。 监听器:先创建监听器、在读取文件时绑定监听器。单独抽离处理逻辑,代码清晰易于维护;一条一条处理,适用于数据量大的场景。 同步读:无需创建

    2024年01月21日
    浏览(43)
  • Easy-Rules引擎

    ​ 当代码需要多次进行 if/else 硬编码的时候,会导致代码的可读性大大降低,后期维护的成本增高。所以引入规则引擎,easy-rules是一个简单但是功能强大的 规则引擎 ,提供了以下特性: 轻量级 框架和易学习的API 基于POJO 的开发 支持从原始规则进行 规则的组合 支持表达式

    2024年02月03日
    浏览(33)
  • 毕业设计So Easy:Java Vue SpringCloud实现博客系统

    目录 1、项目功能 2、项目架构设计 3、项目数据库设计 4、项目架构实现 4.1、Vue架构的实现 4.2、SpringCloud架构的实现 4.3、博客的高可用的实现 5、用户的个人中心 5.1、登录的智能验证 5.2、博客的登录注册 5.3、登录的权限验证 6、用户的安全中心 6.1、用户的安全布局 6.2、用户

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包