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
推荐阅读
- 面试官(你说说如何让“线程”按序执行())
- 如何让shell脚本变成可执行文件
- drools执行完某个规则后终止别的规则执行
- dolphinscheduler调度中执行python报错的处理过程
- 我如何使wordpress表单操作属性转到主题function.php并在那里执行代码
- crontab内环境变量问题(crontab定时任务执行脚本异常)
- drools执行指定的规则
- 致命错误(第463行的C:\xampp\htdocs\AKS_Shop\wp-includes\Requests\Transport\cURL.php中超过30秒的最大执行时间)
- drools中then部分的写法
- 接口测试进阶接口脚本使用--apipost(预/后执行脚本)