欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

drools noloop demo

程序员文章站 2022-05-07 21:54:34
...

 

public class Goods {
    private int discount = 100;
    private int type;
}

 

kmodule.xml

<kbase name="noLoop-kbase"  packages="com.kq.noloop" >
    <ksession name="noLoopSession"/>
</kbase>

noloop.drl

package com.kq.noloop

import com.kq.drools.entity.Goods

rule "updateDistcount"
// 设置为 true
no-loop true
when
    productObj:Goods(discount > 0);
then
    // 符合就将Discount自增1
    productObj.setDiscount(productObj.getDiscount() + 1);
    System.out.println("discount="+productObj.getDiscount());
    update(productObj);  //这个会导致死循环   要加no-loop true
end

 

NoLoopTest

public class NoLoopTest {

    public static void main(String[] args) {
        // 构建KieServices
        KieServices ks = KieServices.Factory.get();
        KieContainer kieContainer = ks.getKieClasspathContainer();
        // 获取kmodule.xml中配置中名称为ksession-rule的session,默认为有状态的。
        KieSession kSession = kieContainer.newKieSession("noLoopSession");

        Goods product = new Goods();
        product.setType(1);
        product.setDiscount(10);

        kSession.insert(product);
        int count = kSession.fireAllRules();
        System.out.println("命中了" + count + "条规则!");
        System.out.println("商品" +product.getType() + "的商品折扣为" + product.getDiscount() + "%。");

        kSession.dispose();

    }

}

 

 

相关标签: drools