drools执行String规则或执行某个规则文件

1、背景 【drools执行String规则或执行某个规则文件】此处主要记录一下2个小的知识点,防止以后忘记。
1、如何在drools中执行某个drl文件。
2、如果我们的规则是一个String类型的字符串,那么该如何执行。
2、实现 2.1 执行指定的drl文件

KieHelper kieHelper = new KieHelper(); // 获取指定的drl文件 Resource resource = ResourceFactory.newClassPathResource("rules/alway-rule.drl", "UTF-8"); kieHelper.addResource(resource,ResourceType.DRL); KieBase kieBase = kieHelper.build(); KieSession kieSession = kieBase.newKieSession(); kieSession.fireAllRules(); kieSession.dispose();

2.2 执行String规则
String drl = "package rules\n" + "\n" + "rule \"rule-01\"\n" + "when\n" + "$i: Integer()\n" + "then \n" + "System.out.println(\"规则:[\"+drools.getRule().getName()+\"]执行,规则内存中存在的值是:\"+$i); \n" + "end"; KieHelper kieHelper = new KieHelper(); kieHelper.addContent(drl, ResourceType.DRL); // 创建KieBase是一个成本很大的 KieBase kieBase = kieHelper.build(EqualityBehaviorOption.IDENTITY); System.out.println(kieBase); // 创建KieSession成本小KieSession kieSession = kieBase.newKieSession(); kieSession.insert(123); kieSession.fireAllRules(); kieBase.removeRule("rules", "rule-01"); kieSession.insert(456); kieSession.fireAllRules(); kieSession.dispose();

需要注意的是KieBase的创建成本是很大的,因此如果真的要这样用必要的缓存是需要的。
3、完整代码 https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-load-rule-from-string-or-file

    推荐阅读