在上一篇中,大概说了一下kmodule的配置方式,这种配置方式其实略显复杂,不如通过数据库读取来的简单。
不过,基于kmodule的配置方式,让我们这些刚学习的人,能更好地了解到drools的机智。在有了一定理解的基础上,现在就学习一下如何实现动态读取规则。
动态读取非常简单,不需要kmodule配置文件,也不需要drl文件,只需要把drl文件的内容,保存到比如数据库中,然后使用以下代码即可
KieSession kSession = null;
try {
// 从数据库根据code查规则
String rule = "这里从数据库取出规则内容";
KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
kb.add(ResourceFactory.newByteArrayResource(rule.getBytes("utf-8")), ResourceType.DRL);
// 检查规则正确性
KnowledgeBuilderErrors errors = kb.getErrors();
for (KnowledgeBuilderError error : errors) {
logger.error("规则文件正确性有误:{}", error);
return Result.buildFail(null, "规则文件正确性有误");
}
InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
kBase.addPackages(kb.getKnowledgePackages());
// 执行规则
kSession =