规则文件

名称 描述 备注
package 包,命名空间 包内的规则名称必须唯一
import 引入fact 可以是declare定义的类,也可以是java中定义的类
global 定义一个全局变量 使用kieSession.setGlobal(key,value)来设置其值
rule 规则明 同一个package下rule是唯一的
salience 规则优先级 可以是负数,0,正数;默认为0,数字越大优先级越高
when 规则中的条件部分 如果有多个规则都匹配,则所有规则都执行
then end 规则中执行的内容 可以直接使用java中定义的静态方法,最后一定接end
//包: 每一个规则开始包的名称。包充当规则命名空间。包内的规则名称必须是唯一的。在规则中包类似于Java包
package com.kittlen.cloud.drools.rules
//Import语句: 要应用规则的任何fact,这些fact都需要导入
import com.kittlen.cloud.drools.People
import org.slf4j.LoggerFactory
import org.slf4j.Logger//定义一个全局变量,代码中使用kieSession.setGlobal(key,value)来设置其值;
global String a;//rule, when, then, 以及 end. 在上述的例子中, rule 规则名 字符串
//when 部分是两个规则中的条件,then 部分是后果.在规则的术语,  when 部分也被称为LHS(左手侧)以及 then 部分作为规则的RHS(右手边)
//如果有多个规则都匹配,则所有规则都执行
//salience 的值越大,越优先执行
//rule "hello"
//    then
//     Logger log=LoggerFactory.getLogger("test");
//     log.info("hello,drools");
//     endrule "helloMan"salience 11when$p: People(sex == "1") //使用 == 不要用equals 存在null情况thenSystem.out.println("你好"+$p.getName()+"先生"+);
endrule "helloWoman"salience 12when$p: People(sex == "2") //当kieSession.insert(obj);传入的对象时People并且perple的sex属性=="2"时执行该规则thenSystem.out.println("你好"+$p.getName()+"女士");
end
名称 描述 备注
duration 规则将指定的时间之后在另外一个线程里触发 经测试在springboot中使用,第一次调用该规则时不执行,会在下一次调用kieSession.fireAllRules()的时候执行
date-expires 当系统时间<=date-expires后才会触发,即设置规则过期时间 默认时间格式为dd-MMM-yyyy,可以通过设置系统时间格式System.setProperty(“drools.dateformat”, “yyyy-MM-dd”)来进行修改格式
date-effective 当系统时间>=date-effective后才会触发,即设置规则生效时间 默认时间格式为dd-MMM-yyyy,可以通过设置系统时间格式System.setProperty(“drools.dateformat”, “yyyy-MM-dd”)来进行修改格式
package com.kittlen.cloud.drools.rulesimport com.kittlen.cloud.drools.Taxrule "-1"salience 0when $t:Tax()thenSystem.out.println($t.getIncome());endrule "0"//duration 设置该属性,规则将指定的时间之后在另外一个线程里触发//经测试在springboot中使用,第一次调用该规则时不执行,会在下一次调用kieSession.fireAllRules()的时候执行
//    duration 100salience 1 //salience 的值越大,越优先执行
//    no-loop 设置一次fireAllRules当前规则只执行一次when $t:Tax(income <= 3500)thenSystem.out.println("0");$t.setNeedPayTax(100);endrule "1"
//当系统时间<=date-expires后才会触发,即设置规则过期时间
//    date-expires "2021-08-31" //Wrong date-expires value: Invalid date input format: [2021-08-31] it should follow: [dd-MMM-yyyy] : [Rule name='1']date-expires "2021-08-31" //设置系统时间格式System.setProperty("drools.dateformat", "yyyy-MM-dd");可以这样使用//当系统时间>=date-effective后才会触发,即设置规则生效时间date-effective "2021-08-01"salience 2
//    no-loopwhen $t:Tax(income <= 3500)thenSystem.out.println("1");$t.setNeedPayTax(100);endrule "2"salience 2no-loopwhen $t:Tax(income <= 5000 && income > 3500)thenSystem.out.println("2");$t.setNeedPayTax(($t.getIncome()-3500)*0.3);end
名称 描述 备注
activation-group 分组 同一个分组中,如果多个匹配,则仅匹配一个,默认执行按顺序排列的第一个,如果配置了salience(优先级),则执行salience最大的那个
package com.kittlen.cloud.drools.rulesimport com.kittlen.cloud.drools.Grouprule "byGroup"activation-group "group1" //分组 同一个分组中,如果多个匹配,则仅匹配一个,默认按顺序排列的第一个,如果配置了salience,则按照salience的第一个when$g:Group()thenSystem.out.println("by1"+$g.getName());endrule "byGroup2"salience 1activation-group "group1"when$g:Group()thenSystem.out.println("by2"+$g.getName());end

使用

package com.kittlen.cloud.controller;import com.kittlen.cloud.drools.AllTax;
import com.kittlen.cloud.drools.Tax;
import entities.Result;
import org.kie.api.runtime.KieSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;/*** @author kittlen* @version 1.0* @date 2021/8/31 0031*/
@RestController
@RequestMapping("/tax")
public class SelfTaxController {@ResourceKieSession kieSession;@RequestMapping("/calculate")public Result calculate(double income) {Tax tax = new Tax();tax.setIncome(income);kieSession.insert(tax);kieSession.fireAllRules();return Result.ok(tax);}
}

补充

declare

参考此文章

KieSession和KieBase

参考文章的(配置kie)

drools-基本使用相关推荐

  1. drools规则引擎可视化_Springboot2(60)集成规则引擎Drools

    核心pom.xml 文件: <parent> <groupId>org.springframework.boot</groupId> <artifactId& ...

  2. 详解:Drools规则引擎探究

    引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...

  3. Drools解决积分问题

    http://blog.csdn.net/quzishen/article/details/6163012 http://www.cnblogs.com/ityouknow/p/7297524.htm ...

  4. Flink从入门到精通100篇(四)-基于 Flink 和 Drools 的实时日志处理

    背景 日志系统接入的日志种类多.格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 接入 ...

  5. 【代码示例】springboot使用drools实现动态规划

    文章目录 实体类 service Drools配置 规则文件 controller 改进:实现动态规划 要求:不同的货物重量有不同的金额,需要根据重量计算金额,且修改规则后动态写入到数据库中 实体类 ...

  6. springboot中使用规则引擎Drools

    文章目录 规则引擎的场景 规则引擎介绍 使用规则引擎的优势 规则引擎应用场景 rools介绍 Drools入门案例 规则引擎构成 Drools基础语法 springboot使用规则引擎 规则引擎的场景 ...

  7. 使用 Drools 规则引擎实现业务逻辑,可调试drl文件

    http://www.srcsky.com/tech/arts/389.html 代码下载http://download.csdn.net/detail/zhy011525/2462313 使用 Dr ...

  8. Drools 5.1.1(一)

    http://shikonglaike.iteye.com/blog/1236354 第一章欢迎 我总是和终端业务用户争论不休,理解规则和流程.最新规则和事件处理的区别.对此,在他们的意识中有这样的问 ...

  9. Drools与Spring集成 登录测试

    http://justsee.iteye.com/blog/1279082 Drools5.2.0.Final与Spring3集成测试 在drools5.2,有一个jar包:drools-spring ...

  10. Drools 在告警关联分析中的应用

    http://benbenxiongyuan.iteye.com/blog/1121479 Drools5当中提供了两个对象与规则引擎进行交互: StatefulKnowledgeSession 和 ...

最新文章

  1. android听书功能实现,基于Android的喜马拉雅听书的实现.docx
  2. 如何评估互阻抗放大器(第 2 部分)
  3. WinRAR4.11-64Bit最简易的注册方法
  4. jq定制上传按钮,选择文件就上传
  5. uni-app与Vue的区别
  6. 使用vh来制作高度自适应页面和元素垂直居中
  7. JavaScript中使用Json
  8. PHP树形结构数据增加每层的级别
  9. itools苹果录屏大师_录屏可以有声音,发照片可以免流量,计算器输错可回删
  10. 尝试在UBUNTU环境下测试优盘读写速度
  11. st语言 数组的常用方法_st语言
  12. notepad 打开php乱码,notepad++打开dll是乱码
  13. Servlet的三个名字
  14. 如果使用半导体RFID读写器CK-S640-AP60E读取RI-TRP-DR2B-40的UID信息
  15. python绘制qq图_Python中作QQ图(quantilequantile Plot)
  16. matlab编程excosxdx求积分,分部积分
  17. 正在解析主机 失败:未知的名称或服务。 wget: 无法解析主机地址
  18. 数据库数据修改报错The instance of entity type ‘XXX‘ cannot be tracked
  19. 中文文本关键词抽取的三种方法(TF-IDF、TextRank、word2vec)
  20. 【BOOST C++容器专题03】【05】Boost.CircularBuffer

热门文章

  1. 软件测试和软件质量保证的关系是什么,软件测试与软件质量关系的概述
  2. android GMS介绍
  3. 扩展欧几里得算法——java
  4. 微信小程序开发工具格式化代码快捷键以及更改快捷键
  5. php多人聊天室系统,PHP打造多人在线聊天室[一]
  6. STM32入门开发: 采用IIC硬件时序读写AT24C08(EEPROM)
  7. 《网络运维 - 基础知识》
  8. SoundPool控件
  9. Webpack5学习笔记(基础篇七)—— Loader加载器
  10. 【Java · 类加载】类加载器