《Drools7.0.0.Final规则引擎教程》第4章 4.3 日历
2017-07-27 21:03
309 查看
日历
日历可以单独应用于规则中,也可以和timer结合使用在规则中使用。通过属性calendars来定义日历。如果是多个日历,则不同日历之间用逗号进行分割。在Drools中,日历的概念只是将日历属性所选择的时间映射成布尔值,设置为规则的属性,控制规则的触发。Drools可以通过计算当期日期和时间来决定是否允许规则的触发。
此示例首先需要引入quarts框架:
<dependency> <groupId>org.opensymphony.quartz</groupId> <artifactId>quartz</artifactId> <version>1.6.1</version> </dependency>
实现Quarts的Calendar转换为Drools的Calendar的转换器CalendarWrapper:
public class CalendarWrapper implements Calendar{ private WeeklyCalendar cal; public CalendarWrapper(WeeklyCalendar cal) { this.cal = cal; } @Override public boolean isTimeIncluded(long timestamp) { return cal.isTimeIncluded(timestamp); } public WeeklyCalendar getCal() { return cal; } public void setCal(WeeklyCalendar cal) { this.cal = cal; } }
规则文件:
package com.rules rule "calenderTest" calendars "weekday" // timer (int:0 1s) // 可以和timer配合使用 when str : String(); then System.out.println("In rule - " + drools.getRule().getName()); System.out.println("String matched " + str); end
测试方法:
@Test public void timerTest() throws InterruptedException { final KieSession kieSession = createKnowledgeSession(); WeeklyCalendar weekDayCal = new WeeklyCalendar(); // 默认包含所有的日期都生效 weekDayCal.setDaysExcluded(new boolean[]{false, false, false, false, false, false, false,false,false}); // weekDayCal.setDayExcluded(java.util.Calendar.THURSDAY, true); // 设置为true则不包含此天,周四 Calendar calendar = new CalendarWrapper(weekDayCal); kieSession.getCalendars().set("weekday", calendar); kieSession.insert(new String("Hello")); kieSession.fireAllRules(); kieSession.dispose(); System.out.println("Bye"); } protected KieSession createKnowledgeSession() { KieServices kieServices = KieServices.Factory.get(); KieSessionConfiguration conf = kieServices.newKieSessionConfiguration(); KieContainer kieContainer = kieServices.getKieClasspathContainer(); KieSession kSession = kieContainer.newKieSession("ksession-rule", conf); return kSession; }
执行测试方法打印结果:
In rule - calenderTest String matched Hello Bye
其中测试过程中的注意点已经在代码中进行标注,比如Calendar可以和timer共同使用;如何设置WeeklyCalendar中哪一天执行,哪一天不执行。
PS:完整demo下载或加QQ群,进入文件目录下载(包含其他更多场景demo)。
后语
此系列课程持续更新中,QQ群:593177274(可扫描左上侧栏目二维码),欢迎大家加入讨论。点击链接关注《Drools博客专栏》。由于Drools资料较少,教程编写不易,每篇博客都亲身实践编写demo。如果对你有帮助也欢迎赞赏(微信)! 也是对原创的最大支持!相关文章推荐
- 《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 ruleflow-group&salience
- 《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法
- 《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop
- 《Drools7.0.0.Final规则引擎教程》第4章 Function函数
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 lock-on-active
- 《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern
- 《Drools7.0.0.Final规则引擎教程》第4章 4.6 结果条件
- 《Drools7.0.0.Final规则引擎教程》第4章 global全局变量
- 《Drools7.0.0.Final规则引擎教程》第4章 4.4 约束(Pattern的一部分)
- 《Drools7.0.0.Final规则引擎教程》第4章 注释&错误信息
- 《Drools7.0.0.Final规则引擎教程》第4章 Query查询之基础
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 activation-group& dialect& date-effective
- 《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字
- 《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象
- 《Drools7.0.0.Final规则引擎教程》第3章 3.1 Hello World 实例
- 《Drools7.0.0.Final规则引擎教程》番外实例篇——activation-group的多FACT对象