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
的建立成本是很大的,因此如果真的要這樣用必要的快取是需要的。