首页 > 编程知识 正文

规则引擎开发,开源规则引擎

时间:2023-05-05 10:35:59 阅读:172973 作者:4333

Drool规则引擎入门源码地址

3359 gitee.com/ergo 9527/drool-demo.git

工作流引擎启动后,首先进行编译工作的是将我们定义的rule加载到Production memory中,这个过程也可以称为知识构建器; 业务系统生成新数据并将其传递给引擎后,引擎会将这些数据作为fact存储在工作存储器中,然后引擎会针对“模式匹配”(即工作存储器中的fact )将rule的最后是真正的执行操作。 引擎按优先级顺序排列Agenda的rule,并执行rule定义的操作操作。 “img”规则引擎手册

Drool入门Demo1.0 1.引入关联依赖! --- drools---- dependencygroupidorg.kie/groupidartifactidkie-API/artifactidversion7. 32.0.final/version artifactidversion7. 32.0.final/version/dependependencygroupidorg.drools/gro ools artifactidversion7. 32.0.0.0

@ data @ builderpublicclassaccount {/* * *开户人*/private String name; /**账户余额单位:万元*/private Double money; /**账户类型: *黑卡: [100-万*钻石卡: [50-100万*金卡: [10-50万*普卡: [0-10万*/privatestes 规则文件可以使用. drl文件或xml文件。 这里使用的是drl文件。

示例代码package drools.demos.rules.rule demo1import com.LX.entity.account/*普卡帐户判定*/rule ' account-rating-normal ' worm al ' system.out.println (【(account.getname ) )是【(account.getAccountType ) account.set money (account.get money ) ) 10.0; 更新(会计; end/*金卡帐户为*/rule ' account-rating-gold ' when account 3360 account (money=10, 判断为money50 ) then account.setaccounttyppppount ) system.out.println ((【(account.getname ) ) )是【(account.getatatatatatatatttappppount】 account.set money (account.get money ) ) 50.0; 更新(会计; end/*钻卡账户判断*/rule ' account-rating-diamond ' when account 3360 account (money=50, money100 ) then account.set account system.out.println (【(account.getname ) )是【(account.getAccountType )】 account.set money (account.get money ) ) 50.0; 更新(会计; end/*黑卡账户判断*/rule ' account-rating-black ' no-looptruewhenaccount 3360 account (money=100 ) then account.set account system.out.pout tType )】用户,当前可用余额为:(account.getmetmype )】system.out.println('=====50万元=====' ); account.set money (account.get money ) ) 50.0; update(account ) end 4.创建配置文件在resources下创建元(INF )文件夹以放置配置文件

? XML version=' 1.0 ' encoding=' utf-8 '? kmodulexmlns 3360 xsi=' http://www.w3.org/2001/XML schema-instance ' xmlns=' http://www.drools.org/xsd/k module ' k basename=' rules1' packages=' drools.demos.rule demo1' ksessionname=' rule demo1'/kbase/km mose在此处也就是说,此rules1节点符合ruledemo1.drl中定义的规则(在kbase节点下放置了一个名为ruledemo1的ksession节点)。 ksession表示运行时执行会话,可以在一个kbase下指定多个不同参数的session

5 .主函数public class application { publicstaticvoidmain (string [ ] args ) ) kieservicesks=kie services.factory.get; kiecontainerkiecontainer=ks.getkieclasspathcontainer (; kiesessionkiesession=kie container.newkiesession (' rule demo1' ); 在kmodule.xml中定义的ksessionaccountaccount=account.builder ().name ()“刘二狗”).accountType (“”) ).money () //将此Fact传递给kieSession.fireAllRules (); //规则检查开始)6.运行和观察结果【刘二狗】为【普卡】用户,现有可用余额: 9.9万元======10万元收款==【刘二狗】为【金卡】用户, 当前可用余额为: 9.9万元===当前可用余额为: 69.9万元====50万元存款===【刘二狗】为【黑卡】用户,当前可用余额为: 119.9万元===

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。