drools-基本使用
规则文件
名称 | 描述 | 备注 |
---|---|---|
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-基本使用相关推荐
- drools规则引擎可视化_Springboot2(60)集成规则引擎Drools
核心pom.xml 文件: <parent> <groupId>org.springframework.boot</groupId> <artifactId& ...
- 详解:Drools规则引擎探究
引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...
- Drools解决积分问题
http://blog.csdn.net/quzishen/article/details/6163012 http://www.cnblogs.com/ityouknow/p/7297524.htm ...
- Flink从入门到精通100篇(四)-基于 Flink 和 Drools 的实时日志处理
背景 日志系统接入的日志种类多.格式复杂多样,主流的有以下几种日志: filebeat采集到的文本日志,格式多样 winbeat采集到的操作系统日志 设备上报到logstash的syslog日志 接入 ...
- 【代码示例】springboot使用drools实现动态规划
文章目录 实体类 service Drools配置 规则文件 controller 改进:实现动态规划 要求:不同的货物重量有不同的金额,需要根据重量计算金额,且修改规则后动态写入到数据库中 实体类 ...
- springboot中使用规则引擎Drools
文章目录 规则引擎的场景 规则引擎介绍 使用规则引擎的优势 规则引擎应用场景 rools介绍 Drools入门案例 规则引擎构成 Drools基础语法 springboot使用规则引擎 规则引擎的场景 ...
- 使用 Drools 规则引擎实现业务逻辑,可调试drl文件
http://www.srcsky.com/tech/arts/389.html 代码下载http://download.csdn.net/detail/zhy011525/2462313 使用 Dr ...
- Drools 5.1.1(一)
http://shikonglaike.iteye.com/blog/1236354 第一章欢迎 我总是和终端业务用户争论不休,理解规则和流程.最新规则和事件处理的区别.对此,在他们的意识中有这样的问 ...
- Drools与Spring集成 登录测试
http://justsee.iteye.com/blog/1279082 Drools5.2.0.Final与Spring3集成测试 在drools5.2,有一个jar包:drools-spring ...
- Drools 在告警关联分析中的应用
http://benbenxiongyuan.iteye.com/blog/1121479 Drools5当中提供了两个对象与规则引擎进行交互: StatefulKnowledgeSession 和 ...
最新文章
- android听书功能实现,基于Android的喜马拉雅听书的实现.docx
- 如何评估互阻抗放大器(第 2 部分)
- WinRAR4.11-64Bit最简易的注册方法
- jq定制上传按钮,选择文件就上传
- uni-app与Vue的区别
- 使用vh来制作高度自适应页面和元素垂直居中
- JavaScript中使用Json
- PHP树形结构数据增加每层的级别
- itools苹果录屏大师_录屏可以有声音,发照片可以免流量,计算器输错可回删
- 尝试在UBUNTU环境下测试优盘读写速度
- st语言 数组的常用方法_st语言
- notepad 打开php乱码,notepad++打开dll是乱码
- Servlet的三个名字
- 如果使用半导体RFID读写器CK-S640-AP60E读取RI-TRP-DR2B-40的UID信息
- python绘制qq图_Python中作QQ图(quantilequantile Plot)
- matlab编程excosxdx求积分,分部积分
- 正在解析主机 失败:未知的名称或服务。 wget: 无法解析主机地址
- 数据库数据修改报错The instance of entity type ‘XXX‘ cannot be tracked
- 中文文本关键词抽取的三种方法(TF-IDF、TextRank、word2vec)
- 【BOOST C++容器专题03】【05】Boost.CircularBuffer