當前,我將所有規則文件存儲在文件系統上(存在大量版本),並在啓動時將它們的不同版本加載到內存中。我想改變存儲我的drools文件在數據庫中,並想知道是否有任何解決方案或插件Drools這方便或我應該製作自己的?Drools:將規則存儲在數據庫中
謝謝。
當前,我將所有規則文件存儲在文件系統上(存在大量版本),並在啓動時將它們的不同版本加載到內存中。我想改變存儲我的drools文件在數據庫中,並想知道是否有任何解決方案或插件Drools這方便或我應該製作自己的?Drools:將規則存儲在數據庫中
謝謝。
那麼,你可能想看看Guvnor作爲提供規則管理的一種方式。
但總之,不,你必須自己寫。
請記住,您不需要在文件之間,你可以閱讀規則的字符串表示出來的分貝,只是編譯。
我也面臨同樣的情況。 我將所有規則文件存儲在數據庫中。
當裝載在應用程序啓動的規則,我從數據庫中的規則,並將它們存儲在臨時文件夾編制並把它們在規則庫。
如果您的規則在運行應用程序期間發生更改,請使用相同的方式更新規則庫中已更改的規則。
是的,它可以做到。所有你需要的是獲得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");
}
你可以考慮使用newInputStreamResource方法,如果更適合你的情況:
case DRL:
kbuilder.add(ResourceFactory.newInputStreamResource(new StringInputStream(myDrlAsString)), ResourceType.DRL);
break;
或
case DRL:
kbuilder.add(ResourceFactory.newInputStreamResource(new ByteArrayInputStream(myDrlAsByteArr)), ResourceType.DRL);
break;
類似的東西。
是的,你可以通過創建規則包(.pkg文件)來完成。這是文本規則的編譯/二進制形式。
在創建knowledgeBuilder你可以指定包的文件的名稱,也是規則的頻率應更新(比如30秒)。
使用Guvnor將文本規則轉換爲.pkg文件。將該文件保存在應用程序可以訪問它的文件夾中。
如果您需要代碼示例請回復。
一旦您開始在數據存儲中存儲多個規則版本的業務,您確實在尋找Guvnor(在Drools 5.x中)或Drools-WB/KIE-Business的業務規則管理(BRMS) WB工作臺在Drools 6.0中。
這些解決方案已經解決了版本控制,存儲和多個規則版本的開箱即用的部署。總之,它們將比本土解決方案更強大。