Drools规则引擎详解-常用的drl实例

package droolsDemo
//说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致,
//主要用于可以根据kmodule.xml中不同的package属性来指定加载哪个.drl文件,
//packages="org.some.pkg"表示ksession2只会加载org.some.pkg下的规则文件,如果没写,则默认加载所有的规则文件。

//导入实体类
import com.qianxin.rulesengine.drools.User
import com.qianxin.rulesengine.drools.Pet
import com.qianxin.rulesengine.drools.Dog
import com.qianxin.rulesengine.drools.BoolTest

rule "multiple condition"
// salience值越大越先匹配
salience 1
    when
        //多个条件测试:user中age在15-30 60-90之间并且 根据user的pet属性的color来处理不同的逻辑,
        $user : User((age>15 && age<30)||(age>60 && age<90))
        $pet : Pet() from $user.pet
        if($pet.getColor()=="black") do[black]
        // do 关键结束后,后续逻辑继续,break 关键字结束后结束程序
        if($pet.getColor()=="white") break[white]
    then
        System.out.print("测试结束");
    then [black]
        System.out.println("pet color is balck");
    then [white]
        System.out.print("pet color is white");
     end

rule "BigInteger test"
     salience 20
      when
      // 可以用BigInteger来解决大数(超过64位)的比较,支持直接用>=  ==  =< 符号直接比较,十分方便
      // 开发中可以用来解决IPv6 的比较
         $dog : Dog(age=="21262780079976241822035969236715638783")
      then
         System.out.println("我等于21262780079976241822035969236715638783");
       end
 rule "string compare"
    salience -20
     when
     /*字符串的数字也是可以比较的*/
        $user : User((age>"15" && age<"40")||(age>"60"))
     then
         System.out.println("我的优先级是 -20");
         //此规则匹配后不再匹配其他规则
         drools.halt();
      end
rule "test bool "
          salience 100
           when
           //即使value为boolean类型,也可以这样比较
              $bool : BoolTest(value=="true")
           then
               System.out.println("I am true");
            end
rule "test contains and not contains"
          salience 200
           when
           //contains 以及not contains 可以测试集合中内容
              $user : User(set contains "360")
           then
               System.out.println("测试表明包含 360");
            end

rule "test not in"
     salience 100
           when
           //测试not in 年龄不在15-30 60-90 之间的符合
              $user : User(!((age>15 && age<30)||(age>60 && age<90)))
           then
               System.out.print("age不在 15-30,60-90之间");
            end

rule "number test"
    when
        $user : User(age>15 && age<60)
    then
        System.out.println("年龄符合条件");
end

rule "String test"
    when
        $pet : Pet(name=="cat")
    then
        System.out.println("宠物名称符合条件");

end
更详细的语法请参考:http://www.1994july.club/seo/

原文地址:https://www.cnblogs.com/1994july/p/12037509.html

时间: 2024-10-13 16:35:31

Drools规则引擎详解-常用的drl实例的相关文章

Drools规则引擎初窥---drl和决策表实现[实例]

因项目需要,看了下drools规则引擎.写了一个比较简单的drools的drl规则和决策表实现的例子. 规则说明: 网络商城要举办活动(奖励额外积分), 订单原价金额在 100以下, 不加分 100-500 加100分 500-1000 加500分 1000 以上 加1000分 1.建立最基本的Drools项目结构并引入必须的类库.(这里采用junit来执行单元测试).创建一个Java Project,建立maven形式的源码包. 2.定义实体类Order.java 1 import java.

drools规则引擎因为内存泄露导致的内存溢出

进入这个问题之前,先了解一下drools: 在很多行业应用中比如银行.保险领域,业务规则往往非常复杂,并且规则处于不断更新变化中,而现有很多系统做法基本上都是将业务规则绑定在程序代码中. 主要存在的问题有以下几个方面: 1) 当业务规则变更时,对应的代码也得跟着更改,每次即使是小的变更都需要经历开发.测试验证上线等过程,变更成本比较大. 2) 长时间系统变得越来越难以维护. 3) 开发团队一般是由一个熟悉业务的BA(业务分析人员)和若干个熟悉技术的开发人员组成,开发人员对业务规则的把握能力远不及

drools规则引擎初探

1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算法的规则引擎的实现.具有了OO接口的RETE,使得商业规则有了更自然的表达. Rule是什么呢? 一条规则是对商业知识的编码.一条规则有 attributes ,一个 Left Hand Side ( LHS )和一个 Right Hand Side ( RHS ).Drools 允许下列几种 attributes : salience , agenda-group , no-loop , au

String 字符串详解 / 常用API

String 详解 / 常用API 简介 String 是不可改变的字符串序列.String 为字符串常量 StringBuilder 与StringBuffer 均为可改变的字符串序列.为字符串变量 StringBuilder 是非线程安全的 (JDK 1.5) StringBuffer 是线程安全的 (JDK 1.0) 总结: String : 适用于少量的字符串操作的情况 StringBuilder : 适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer : 适用于多线

Drools 规则引擎环境搭建

一.关于 drools 规则引擎 前面写过一篇 Drools 规则引擎相关的文章,这篇文章主要记录一下规则引擎的环境搭建和简单示例.不熟悉 drools 的朋友可以看看这篇文章: 自己写个 Drools 文件语法检查工具--栈的应用之编译器检测语法错误 介绍的内容: Drools 规则引擎的使用场景 Drools 规则引擎的优点 Drools的基本工作工程(Fact对象.Drl文件内容.Drools的基础语法) drools 文件的形式 Drools 文件语法初步检查 二 .Drools 的环境

SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效.具有易于访问企业策略.易于调整以及易于管理的特点,作为开源业务规则引擎,符合业内标准,速度快.效率高. 2.规则语法 (1).演示drl文件格式 package droolRule ; import org.slf4j.

如何查看mysql数据库的引擎/MySQL数据库引擎详解

一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mysql> show variables like '%storage_engine%'; 你要看某个表用了什么引擎(在显示结果里参数engine后面的就表示该表当前用的存储引擎):mysql> show create table 表名; MySQL数据库引擎详解 作为Java程序员,MySQL数据库

36 web系统架构及cache基础、varnish4基础应用、varnish状态引擎详解及vcl

02 varnish4基础应用 配置环境: node1 CentOS7.2 192.168.1.131 [[email protected] ~]# yum -y install varnish [[email protected] ~]# vim /etc/varnish/varnish.params 修改 VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G" 为 VARNISH_STORAGE="ma

Spring Boot+Drools规则引擎整合

目的 官方的Drools范例大都是基于纯Java项目或Maven项目,而基于Spring Boot项目的很少. 本文介绍如何在Spring Boot项目上加上Drools规则引擎. POM依赖 POM文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&q