drools 更新规则包下面的规则
效果说明
当我在运行的过程中想添加规则到指定的 规则包下面的时候 可以使用
@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";
String drlStr2="package rules;"
+ "\n"
+ "rule \"test2\"\n"
+ "when\n"
+ "eval(true)\n"
+ "then \n"
+ " System.out.println(\"----------2nihao\");\n"
+ "end";
KieHelper helper=new KieHelper();
helper.addContent(drlStr,ResourceType.DRL);
KnowledgeBaseImpl kieBase =(KnowledgeBaseImpl) helper.build();
KieSession session = kieBase.newKieSession();
KieSession kieSession = kieBase.newKieSession();
Rule rule = session.getKieBase().getRule("rules", "test");
System.out.println("rule1:="+rule);
//移除规则
kieBase.removeRule("rules","test");
//重新添加规则
KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
//装入规则,可以装入多个
kb.add(ResourceFactory.newByteArrayResource(drlStr2.getBytes("utf-8")), ResourceType.DRL);
kb.getKnowledgePackages().forEach(k->{
kieBase.addPackage(k);
});
Rule rule1 = kieSession.getKieBase().getRule("rules", "test2");
System.out.println("rule3:="+rule1);
kieSession.fireAllRules();
}