当前位置:网站首页>drools-基础语法
drools-基础语法
2022-07-26 17:10:00 【信仰_273993243】
一、引入Jar包,配置POM文件
二、更详细的语法
三、表达式语法介绍
最简单完成的一个规则,语法也要包含这些
rule "name"
when
。。。。。。
then
。。。。。。
end
案例1
rule "withdraw 11"
agenda-group "trade.withdraw"
enabled true
salience 11
when
$routeResult: RouteResult()
$request: WithdrawRouteRuleRequest()
$payer: RouteRuleRequestAccount(accountType == "AAA" && fundPlSettleModel == "BBB") from $ request.getPayer()
then
logger.info("{}匹配到规则,返回场景编码{}",$request.getIdempotenceNo(),"trade.withdraw.1001");
$routeResult.setResult(true);
$routeResult.setBusinessScenariosCode("trade.withdraw.1001");
end
rule “withdraw 11” rule表示这是一个规则,规则名叫withdraw 11
1、salience
用来设置规则执行的优先级,salience属性的值是一个数字,数字越大执行优先级越高,同时它的值可以是一个负数。默认情况下,规则的ssalience 默认值为0,所以如果我们不手动设置规则的salience 属性,那么它的执行顺序是随机(但是一般都是按照加载顺序。)
2、enabled
enabled 属性比较简单,它是用来定义一个规则是否可用的。该属性的值是一个布尔值,默认该属性的值为true,表示规则是可用的,如果手工为一个规则添加一个enabled属性,并且设置其enabled 属性值为false,那么引擎就不会执行该规则
3、agenda-group
引擎在调用这些设置了agenda-group 属性的规则的时候需要显示的指定某个Agenda Group 得到Focus(焦点),比如下面代码
//getSession 获取KieSession 的方法自己写的。
KieSession ks = getSession();
//设置agenda-group 的auto-focus使其执行
ks.getAgenda().getAgendaGroup("group1").setFocus();
注:对规则名过滤,只执行某个规则名下面的规则
kSession.fireAllRules(new RuleNameEqualsAgendaFilter("man"))
//【man】是规则名,也就是rule "man"
案例2
rule "withdraw 11"
agenda-group "trade.withdraw"
enabled true
salience 11
when
$routeResult: RouteResult() //判断内存中必须有RouteResult类型对象
$request: WithdrawRouteRuleRequest() //判断内存中必须有WithdrawRouteRuleRequest类型
//$request.getPayer() 表示上面定义的变量$request对象有一个变量payer
//payer对象必须是RouteRuleRequestAccount类型,payer对象里面的属性accountType
$payer: RouteRuleRequestAccount(accountType == "A" && fundPlSettleModel == "B")
from $request.getPayer()
then
logger.info("{}匹配到规则,返回场景编码{}",$request.getIdempotenceNo(),"trade.withdraw.1001");
$routeResult.setResult(true);
$routeResult.setBusinessScenariosCode("trade.withdraw.1001");
end
1、from
from的作用:指定左边作为它的源,作为右边表达式要用到的变量。下面举一个例子也说一下,from的用法。
RouteRuleRequest routeRuleRequest = new RouteRuleRequest ();
kieSession.insert(routeRuleRequest );
//往kieSession里面设置了一个routeRuleRequest 类型的对象,或者说往工作内存设置对象。
##判断是否包含TransferRouteRuleRequest类型的对象,如果有赋值给$request这个变量。
$request: RouteRuleRequest ()
$receiver: RouteRuleRequestAccount(accountType == 1) from $request.getReceiver()
上面这段代码的意思,从$request里面取一个【属性变量receiver】,然后赋值给左边表达式,也就是赋值给下面这段代码
$receiver: RouteRuleRequestAccount(accountType == 1)
左边再判断这个变量receiver是否是RouteRuleRequestAccount类型,并且里面的属性accountType是否等于1, 再把这个结果给到$receiver这个变量。
案例3
$request: TransferRouteRuleRequest()
$modeType: TransferRouteRuleRequest(modeType == 2)
$platform: TransferRouteRuleRequest(isSamePlatform == 1)
TransferRouteRuleRequest括号判断数据,可以写多行,默认是and拼接
四、操作List
kieSession.insert(list); //往工作内存设置集合
##规则处理:打印出所有List集合中的元素
rule "hello_0"
when
$li:List(size > 0) ##依次获取工作内存中的所有List集合给$li
$m:Animal(name == "cat") from $li ##获取List中name = "cat" 的Animal对象,可能会有多个,可能只有一个。
then
##依次打印当前List中的message
##注意,这里会被多次执行,执行次数为所有List集合元素总数(注意不是当前List集合总数)
##因为规则从工作内存中筛选出一条完全符合conditions的数据,都会在agenda中插入一个规则与匹配数据的组合,再由agenda负责执行规则。
System.out.println("id:"+$m.getId()+",name:"+$m.getName());
end
边栏推荐
- Asemi rectifier bridge kbpc2510, kbpc2510 parameters, kbpc2510 specifications
- Common APIs
- Spark数据格式UnsafeRow
- Mondriaans‘s Dream(状态压缩DP)
- hosts该文件已设置为只读的解决方法
- Spark data format unsafe row
- 【集训Day3】section
- Week 16 OJ practice 1 calculates the day of the year
- [training Day1] spy dispatch
- [Oumi reading club] talk about the creator economy in the meta universe: infinite dimension
猜你喜欢

AI zhetianchuan DL regression and classification
![[training Day1] spy dispatch](/img/cd/34845de1093c777f6ecff35d9452c3.png)
[training Day1] spy dispatch
![[metauniverse OMI theory] analyze Web3 risk challenges and build Web3 ecological security](/img/d1/4a424d810f7a6aaccae80b4fe232c0.png)
[metauniverse OMI theory] analyze Web3 risk challenges and build Web3 ecological security

Spark unified memory partition

4、 Service communication principle, code implementation

跨站脚本攻击(XSS)

【集训Day1】 Dwarves line up
![[Day2] cinema ticket](/img/da/a206266b94d1579a18f761fff74ef8.png)
[Day2] cinema ticket

CCS tm4c123 new project

The user experience center of Analysys Qianfan bank was established to help upgrade the user experience of the banking industry
随机推荐
点云目标检测KITTI数据集bin文件可视化,一站式解决
《敏捷宣言》四大价值观,十二大原则
Sign up now | oar hacker marathon phase III midsummer debut, waiting for you to challenge
Asemi rectifier bridge kbpc3510, kbpc3510 package, kbpc3510 application
一文详解吞吐量、QPS、TPS、并发数等高并发指标
OpenWrt之feeds.conf.default详解
6、 Common commands of ROS (I): rosnode, rostopic, rosmsg
Spark数据格式UnsafeRow
Machine learning by Li Hongyi 2. Regression
Kudu design tablet
Performance tuning bugs emerge in endlessly? These three documents can easily handle JVM tuning
Spark统一内存划分
即刻报名|飞桨黑客马拉松第三期盛夏登场,等你挑战
openssl
[training Day1] spy dispatch
性能调优bug层出不穷?这3份文档轻松搞定JVM调优
点击劫持攻击
【集训Day3】section
Three ways of de duplication in SQL
The Agile Manifesto has four values and twelve principles