Drools:在数据库中存储规则

Posted

技术标签:

【中文标题】Drools:在数据库中存储规则【英文标题】:Drools: storing rules in database 【发布时间】:2011-05-22 12:23:14 【问题描述】:

目前我将所有规则文件存储在文件系统上(有很多版本)并在启动时将它们的不同版本加载到内存中。我想更改为将我的 drools 文件存储在数据库中,并且想知道 Drools 是否有任何解决方案或插件可以促进这一点,或者我应该自己制作?

谢谢。

【问题讨论】:

我认为没有人通过在 NOSQL DB 上使用 RDBMS 来回答这个问题。 【参考方案1】:

是的,可以做到。您所需要的只是获得InputStream 的能力。在我的情况下,我使用我自己的JPA 类RulePackage 将规则源保存为字节[],但您可以使用直接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;

类似的东西。

【讨论】:

【参考方案2】:

是的,您可以通过创建规则包(.pkg 文件)来实现。这是文本规则的编译/二进制形式。

您可以在创建知识构建器时指定包文件的名称,以及更新规则的频率(比如 30 秒)。

使用 Guvnor 将文本规则转换为 .pkg 文件。将此文件保存在应用程序可以访问的文件夹中。

如果您需要代码示例,请还原。

【讨论】:

【参考方案3】:

好吧,您可能希望将 Guvnor 视为提供规则管理的一种方式。

但简而言之,不,您必须自己编写。

请记住,您不需要中间有文件,您可以从数据库中读取规则的字符串表示形式并进行编译。

【讨论】:

【参考方案4】:

我也面临同样的情况。 我将所有规则文件存储在数据库中。

在应用程序启动时加载规则时,我从数据库中获取规则并将它们存储在临时文件夹中,以便编译并将它们放入规则库中。

如果您的规则在运行应用程序期间发生更改,请以相同方式更新规则库中更改的规则。

【讨论】:

【参考方案5】:

一旦您开始在数据存储中存储多个版本的规则,您就会真正在寻找 Guvnor(在 Drools 5.x 中)或 Drools-WB/KIE-WB 的业务规则管理 (BRMS) 功能Drools 6.0 中的工作台。

这些解决方案已经解决了开箱即用的多个规则版本的版本控制、存储和部署问题。简而言之,它们将比本土解决方案更强大。

【讨论】:

以上是关于Drools:在数据库中存储规则的主要内容,如果未能解决你的问题,请参考以下文章

将drools引导决策表编译成规则

在 Drools 6 中以编程方式创建新的 drools 规则的新接受方式是啥?

数据驱动规则引擎 - Drools

drools属性能不能做成动态

Drools笔记:初识与入门

drools的规则实例到底指的是啥?