Drools系列入门:规则文件基础知识

规则引擎的优点

业务规则与系统代码分离,实现业务规则的集中管理
在不重启服务的情况下可随时对业务规则进行扩展和维护
可以动态修改业务规则,快速响应需求变更
减少了硬编码业务规则的成本和风险
使用规则引擎提供的规则编辑工具,使复杂的业务规则实现变得的简单

规则引擎的应用场景

风险控制系统----风险贷款、风险评估
反欺诈项目----银行贷款、征信验证
决策平台系统----财务计算
促销平台系统----满减、打折、加价购

其实业务逻辑判断较多的系统的都可以使用规则引擎。

规则文件的位置:

    必须在resource下面且以drl后缀

 规则文件重要组成

关键字 说明
package 包名
import   引入业务实体类
rule 规则体

规则体要求:

          when条件后面没有任何标点符号

           then 后面每一条都必须要加分号表示结束

规则体语法:

rule     规则名称【保证唯一】

when 

            【业务规则条件】

then

             【输出】;

end

错误实例一:多余括号

rule "rule_2"
when 
     $store: (Order(amount >=100) && Order(amount <=500))
then 
     $store.setScore(100);
     System.out.println("消费100元-500元 加100积分 ");
end

错误实例二: 每行结束未加分号

rule "rule_3"
when 
    $store:(Order(amount >=500) && Order(amount <=1000))
then 
   $store.setScore(500)
   System.out.println("消费500元-1000元 加500积分 ")
end

正确写法:

错误一的正确写法如下两种

rule "rule_2"
when 
     $store: Order(amount >=100) && Order(amount <=500)
then 
     $store.setScore(100);
     System.out.println("消费100元-500元 加100积分 ");
end
rule "rule_2"
when 
     $store: Order(amount >=100) && Order(amount <=500)
then 
     $store.setScore(100);
     System.out.println("消费100元-500元 加100积分 ");
end

错误二的正确写法

rule "rule_3"
when 
  $store:Order(amount>500 && amount<=1000)
then 
   $store.setScore(500);
   System.out.println("消费500元-1000元 加500积分 ");
end

如果规则文件有问题,则项目启动报如下错误:

报drools.compiler.kie.builder.impl.InternalKieModule编译不通过

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.kie.api.runtime.KieContainer]: Factory method 'kieContainer' threw exception; nested exception is java.lang.ClassCastException: com.drools.conf.DroolsConfig$$Lambda$584/310792845 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.3.22.jar:5.3.22]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:653) ~[spring-beans-5.3.22.jar:5.3.22]
	... 85 common frames omitted
Caused by: java.lang.ClassCastException: com.drools.conf.DroolsConfig$$Lambda$584/310792845 cannot be cast to org.drools.compiler.kie.builder.impl.InternalKieModule
	at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:184) ~[drools-compiler-7.6.0.Final.jar:7.6.0.Final]
	a

猜你喜欢

转载自blog.csdn.net/qq_38423256/article/details/129287381