目前,我将所有规则文件存储在文件系统上(它们有很多版本),并在启动时将它们的不同版本加载到内存中。我想更改为将我的 drools 文件存储在数据库中,并且想知道 Drools 是否有任何解决方案或插件可以促进这一点,或者我应该自己制作?
Thanks.
是的,这是可以做到的。您所需要的只是获得的能力InputStream
.就我而言,我使用我自己的 JPA 类RulePackage
将规则源保留为 byte[],但您可以使用直接 JDBC 连接来访问数据库模式中的 BLOB/CLOB 字段。重要的是还要保存存储的规则源的类型,构建规则包时需要它:
switch(rulePackage.getRuleSourceType()) {
case DRL:
kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DRL);
break;
case EXCEL:
kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, excelConfig);
break;
case CSV:
kbuilder.add( ResourceFactory.newByteArrayResource(rulePackage.getSource()), ResourceType.DTABLE, csvConfig);
break;
default:
throw new Exception("Rule package '" + rulePackage.getName() + "' has unknown type");
}
您可以考虑使用新的 InputStreamResource 方法更适合您的情况:
case DRL:
kbuilder.add( ResourceFactory.newInputStreamResource(new StringInputStream(myDrlAsString)), ResourceType.DRL);
break;
or
case DRL:
kbuilder.add( ResourceFactory.newInputStreamResource(new ByteArrayInputStream(myDrlAsByteArr)), ResourceType.DRL);
break;
类似的事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)