Drools 5 采用了原生的规则语言,那是一种非 XML 文本格式。在符号方面,这种格式是非常轻量的,它的应用非常简单。可以适用于比较复杂的业务逻辑,本例是用于计费系统的批价,粗略来说,有按次收费,按月收费,按照流量收费,又根据前提不同,使用不同的优惠策略,比如购买了某产品赠送800通话实践100分钟,又有可能根据当月实际使用天数赠送一定的通话时长。如此复杂场景使用规则引擎再好不过了,将动态的都用规则标识,模型里只存有静态数据。
首先Drools 规则要卸载drl 的文件里,通过程序加载这个drl,然后才可以运算
1. 引入jar包(maven 编译)
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>5.0.1</version>
</dependency>
2. 包装下drools
public class RuleRunner {
public RuleRunner() {
}
private static final String RULES_FILE="rules/charge.drl";
public void runRules(Object[] facts){
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
System.out.println( "Loading file: " + RULES_FILE );
kbuilder.add( ResourceFactory.newClassPathResource( RULES_FILE,RuleRunner.class ),ResourceType.DRL );
if (kbuilder.hasErrors() ) {
throw new ServiceException("charge.drl is a invalid rule file!");
}
Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
kbase.addKnowledgePackages( pkgs );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
for ( int i = 0; i < facts.length; i++ ) {
Object fact = facts[i];
System.out.println( "Inserting fact: " + fact );
ksession.insert( fact );
}
ksession.fireAllRules();
}
}
3. 调用这个封装进行异步的规则处理
Object[] facts={chargeRulesModel,chargePriceResult};
new RuleRunner().runRules(facts);
facts 就是要传入传出的对象。
4. 一个规则的解析
#created on: 2010-4-26
package charge
#list any import classes here.
import java.math.BigDecimal;
rule "rule_800yz:be707 -2" #800月租费优惠 规则头注释
when #条件
$chargeModel : ChargeRulesModel($pricePlan:pricePlan,$featureList:featureList,eval($pricePlan.getPricePlanMain().getRuleCode().equals("rule_800yz")),eval(String.valueOf($featureList.get("pp900_1000")).equals("10Express")))
$chargeResult : ChargePriceResult()
then # 执行逻辑
double price=$pricePlan.getCyclePolicy().getPrice();
int usage=(Integer)($featureList.get("pp900_61"));
int accountLength=(Integer)($featureList.get("pp900_59"));
int totalAccount=(Integer)($featureList.get("pp900_88"));
int preferValue= Integer.parseInt($pricePlan.getPreferentialPolicy().getPreferentValue());
##总使用量-赠送量>账期 则取账期的使用量作为使用天数
if(totalAccount- preferValue>= accountLength){ #使用类似java语言的判断逻辑
usage= accountLength;
}else{
usage = totalAccount- preferValue;
}
BigDecimal result= new BigDecimal(price*usage/accountLength);
$chargeResult.setAmount(result);
System.out.println("800月租费优惠");
end
主要包含注释,条件,要执行的业务,还可以写方法-也就相当于helper类,实际运行时会转化为java类,但是不建议这么写,你完全可以另外写个java类,这里调用就可以了。
到这里就可以完成你的drools 应用了,具体原理下回分解
分享到:
相关推荐
### 规则引擎Drools使用手册:4.0版更新要点详解 #### 一、Drools 4.0新特性概览 Drools 4.0是一次重要的更新,相较于之前的Drools 3.0.x系列,在语言表达、引擎性能以及工具实用性等方面都有显著提升。以下为此次...
从基础讲起,结合应用场景,由浅到深细化讲解drools规则引擎的的相关知识,并结合具体实例,演示功能的使用和注意事项。后面通过搭建具体的项目并结合springboot框架联合使用Drools的相关知识包括决策表的使用,囊括...
如果对drools还不是特别熟悉的,可以看下 《规则引擎Drools 之 初识drools》这篇文章; 本文源码,github 传送门:https://github.com/vincent9309/drools: 系统架构如下: 二、项目目录结构 三、...
为了更好地理解和应用Drools,你可以阅读“规则引擎Drools在J2EE项目开发中的应用.pdf”这份文档,它将详细讲解如何在实际项目中集成和使用Drools,包括规则的编写、引擎的配置、以及与J2EE环境的交互等内容。...
### 规则引擎Drools 中文使用指南 #### 一、Drools简介与特点 Drools是一个开源业务规则管理系统(BRMS),最初由Codehaus发起并维护,后来被JBoss收购并更名为JBoss Rules。Drools旨在提供一个易于访问、调整和...
### Java规则引擎——Drools的深度解析与应用探索 #### 一、规则引擎与基于规则的专家系统 规则引擎,作为软件开发领域的一项关键技术,其核心在于模仿人类的决策过程,通过预定义的规则集对输入数据进行分析,...
规则引擎是一种软件系统,它解析并执行预先定义好的业务规则,这些规则可以是复杂的条件语句或决策逻辑。在汽水问题的场景中,我们可能会遇到如下的规则: 1. **如果客户购买两瓶汽水,可以享受9折优惠。** 2. **...
在使用Drools规则引擎时,有时我们需要实现更加灵活的规则管理方式。例如,在开发过程中,我们可能希望不通过每次修改代码或重启服务来更新业务规则,而是能够在运行时动态地更改规则。本文将详细介绍如何在Drools中...
1. **Rule Engine(规则引擎)**:负责解析、编译和执行业务规则。 2. **Knowledge Base(知识库)**:存储和管理所有的规则。 3. **Working Memory(工作内存)**:存放事实对象,规则引擎根据这些对象来触发规则。...
Drools 规则引擎详解 Drools 规则引擎是基于 Java 的开源规则引擎,由 JBoss 发布。作为一个业务规则管理系统(BRMS),Drools 提供了一个基于规则的系统,用于定义、执行和管理业务规则。Drools 的主要功能是将...
《Drools规则引擎样例系统深度解析》 Drools,这个强大的开源规则引擎,是Java领域中用于实现业务规则管理和决策逻辑的核心工具。它以其高效、灵活和可扩展的特性,在各种复杂的业务场景中得到了广泛应用。在这个名...
《Drools5规则引擎开发教程》是一本深入解析Drools规则引擎的实用指南,旨在帮助开发者理解和掌握如何在实际项目中应用规则引擎技术。Drools是Java平台上的一个开源规则引擎,它允许开发者以声明式的方式编写业务...
这些内容覆盖了规则引擎的基础知识、Drools规则引擎的特点和使用方法、以及与Spring Boot的集成示例。文档的持续更新表明了作者致力于持续提供最新的信息和帮助,满足读者在Drools及风控反洗钱系统应用方面的需求。
【 Drools 规则引擎详解及实例演示】 Drools 是一个开源的、基于Java的规则引擎,它允许开发者以声明式的方式编写业务规则。在上述的信用卡申请业务场景中,Drools 可以非常有效地处理复杂的业务逻辑,替代传统的 ...
《Drools5规则引擎开发教程》是一本深入解析Drools5这一强大规则引擎的指导书籍。Drools5是JBOSS公司推出的一款开源业务规则管理系统(BRMS),它基于Java语言,旨在帮助开发者将业务逻辑从应用程序中分离出来,实现...
通过阅读"Drools5规则引擎开发教程.pdf",你将了解如何配置和使用Drools5,以及如何利用其强大功能解决实际业务问题。学习Drools5不仅有助于提升你的业务逻辑处理能力,还能帮助你更好地实现业务规则的管理和维护。
《Drools开发最全中文版技术指南》是一份针对Java开发者的重要参考资料,它全面讲解了如何使用Drools这一强大的规则引擎进行业务逻辑的构建和管理。Drools是Red Hat公司推出的一个开源规则引擎,它基于Java,支持...
**标题:“规则引擎drools”** 规则引擎Drools是一种强大的、开源的Java决策管理引擎,它基于业务规则管理系统(BRMS)的概念,允许开发者将业务逻辑编码为一系列可执行的规则。Drools的核心是基于Rete算法的推理...
Drools5.x 是一款基于 Java 的开源规则引擎,它允许开发者在业务逻辑层中使用基于规则的编程方法来构建灵活、可管理的业务规则。规则引擎作为一种软件组件,专门用于根据一组定义好的规则来处理业务逻辑。Drools5.x ...
Java规则引擎Drools是一种强大的业务规则管理系统,它允许开发者将复杂的业务逻辑以规则的形式分离出来,便于管理和维护。Drools是基于Model Driven Architecture(MDA)的,它支持RuleML和Business Rule Markup ...