drools-基础语法

一、引入Jar包,配置POM文件

跳转1

二、更详细的语法

跳转2

三、表达式语法介绍

最简单完成的一个规则,语法也要包含这些

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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信仰_273993243

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值