36、Drools语法之定时器和日历

定时器 
规则现在支持基于 interval(间隔)和 cron 的定时器, 替代了过时的 duration(期限) 属性
简单的定时器属性使用
第一种写法
timer ( int: <initial delay> <repeat interval>? )
timer ( int: 30s )
timer ( int: 30s 5m )
第二种写法
timer ( cron: <cron expression> )
timer ( cron:* 0/15 * * * ? )

Interval "int:" 定时器遵守 JDK 语义,初始化延迟,紧跟一个可选的重复间隔。Cron "cron:"定时器遵 守标准的 cron 表达式: 一个 Cron 例子
rule "Send SMS every 15 minutes"
    timer (cron:* 0/15 * * * ?)
    when
        $a : Alarm( on == true )
    then
        channels[ "sms" ].insert( new Sms( $a.mobileNumber, "The alarm is still on" );
end
调节一个 Quartz 日历
Calendar weekDayCal = QuartzHelper.quartzCalendarAdapter(org.quartz.Cale ndar quartzCal)
利用有 状态知识会话注册日历
ksession.getCalendars().set( "week day", weekDayCal );

它们可同时使用于普通规则和包含定时器的规则中。 规则的 calendar 属性可以有一个或多个逗号日历 名字:
一起使用日历和定时器:
rule "weekdays are high priority"
    calendars "weekday"
    timer (int:0 1h)
    when
        Alarm()
    then
        send( "priority high - we have an alarm );
end
rule "weekend are low priority"
    calendars "weekend"
    timer (int:0 4h)
    when
        Alarm()
    then
        send( "priority low - we have an alarm );
end

在6.4版本中,定时器的调用方法不是简单的通过 fireAllRules 进行调用的,而是另有其他用法,下面我们就简单的说明一下。
我们点击到fireAllRules中可以看到 里面有两种方法,用的是是重载的方式。我们先简单的的说明一下关于定时器的使用: fireUntilHalt() 方 fireUntilHalt( final  AgendaFilter  agendaFilter)  
源码中给定的说明是

通过一个简单的例子来说明一下
DRL文件 内容如下:
package rules.testdrl;

rule "timer"
timer ( int: 10s )
when
       eval(true);
then
System.out.println("用来测试 timer");
end
JAVA使用代码如下:
package com.drools.api.grammar;

import com.drools.model.TestPersonSet;
import com.drools.model.TestTemplate01;
import org.drools.template.ObjectDataCompiler;
import org.junit.Test;
import org.kie.api.io.Resource;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieSession;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.utils.KieHelper;

import java.util.ArrayList;
import java.util.Collection;

/**
 * Created by kangz on 2016/9/7.
 */
public class TimerTest {
@Test
public void  timerTest () throws Exception {
  Resource dis = ResourceFactory.newClassPathResource("rules/testdrl/TimerTest.drl", TestTemplate01.class);
  ObjectDataCompiler converter = new ObjectDataCompiler();
  Collection<TestPersonSet> cfl = new ArrayList<TestPersonSet>();
  KieHelper helper = new KieHelper();
  helper.addResource(dis, ResourceType.DRL);
  KieSession ksession = helper.build().newKieSession();
  ksession.fireUntilHalt();
  ksession.dispose();
}

}
通过上面的例子,我们可以得到 输出的结果。如果按之前的  fireAllRules 写法虽然不会报错,但不会执行规则。
至于第二个方法。 fireUntilHalt( final  AgendaFilter  agendaFilter)我也做一个简单说明,其实这个方法理解起来很简单,就是指定规则名。那如何才能正确的理解这个指定规则名呢,请到 Drools调用API篇之fireAllRules的使用指定规则名说明 这一章节中了解

下面是小编的微信转帐二维码,小编再次谢谢读者的支持,小编会更努力的

----请看下方↓↓↓↓↓↓↓

百度搜索 Drools从入门到精通:可下载开源全套Drools教程

深度Drools教程不段更新中:


更多Drools实战陆续发布中………

扫描下方二维码关注公众号 ↓↓↓↓↓↓↓↓↓↓



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值