1、背景
此处次要记录一下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