规则引擎drools Part3
规则属性
- drools中提供的部分属性
salience:指定规则执行的优先级,取值类型为Integer,数值越大越有限执行,每个规则默认的执行顺序是由上到下
dialect:指定规则使用的语言类型,支持java和mvel
enabled:是否启用规则,true/false,默认true启用规则
date-effective:指定规则生效的时间,默认格式是dd-MMM-yyyy,也可以自定义日期格式
date-expires:指定规则失效时间
activation-group:激活分组,具有相同分组名称的规则只能有一个规则触发
agenda-group:议程分组,只有获取焦点的组中的规则才有可能触发
auto-focus:自动获取焦点,一般结合议程分组一起使用
no-loop:防止死循环,当规则通过update等方法修改Fact对象时,可能使当前规则再次被激活从而导致死循环,取值类型为Boolean,默认为false
timer:定时器,指定规则触发的时间
方式一:timer(int: <initial delay> <repeat interval>?)遵循java.util.Timer对象的使用方法,第一个参数表示几秒后执行,第二个参数表示每隔几秒执行一次,第二个参数可选
方式二:timer(cron: <cron expression>)使用标准的unix cron表达式方式定义规则执行的时间
kieSession.getAgenda().getAgendaGroup("议程组名称").setFocus();
- 创建规则文件timer.drl
package timer.test
import java.text.SimpleDateFormat
import java.util.Date
rule "定时规则1"
timer(5s 2s)
//需要在java中设置drools系统时间格式
//System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm")
//date-effetive "2024-04-27 21:15"
when
then
System.out.println("定时规则1触发,触发时间为:" +
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date()));
end
rule "定时规则2"
timer (cron:0/1 * * * * ?)
when
then
System.out.println("定时规则2触发,触发时间为:" +
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date()));
end
- 创建启动类
package org.lxx.drools;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
public class DroolsDemo {
public static void main(String[] args) {
KieServices kieServices = KieServices.Factory.get();
KieContainer kieContainer = kieServices.newKieClasspathContainer();
KieSession kieSession = kieContainer.newKieSession();
new Thread(new Runnable() {
public void run() {
kieSession.fireUtilHalt();
}