这种做法,可以实现当规则修改后不用重新创建KieBase,甚至不重新创建session,规则都会生效。
下面例子drools版本是6.4
@Test
public void test117() throws Exception {
String drlStr="package rules;"
+ "\n"
+ "rule \"test\"\n"
+ "when\n"
+ "eval(true)\n"
+ "then \n"
+ " System.out.println(\"----------nihao\");\n"
+ "end";
KieHelper helper=new KieHelper();
helper.addContent(drlStr,ResourceType.DRL);
KnowledgeBaseImpl kieBase =(KnowledgeBaseImpl) helper.build();
KieSession session = kieBase.newKieSession();
//移除规则
kieBase.removeRule("rules","test");
//重新添加规则
KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
//装入规则,可以装入多个
kb.add(ResourceFactory.newByteArrayResource(drlStr.getBytes("utf-8")), ResourceType.DRL);
kieBase.addKnowledgePackages(kb.getKnowledgePackages());
session.fireAllRules();
}
扫码加drools技术交流群