使用groovy元编程实现规则引擎

利用groovy的元编程能力,实现以下逻辑。将function和匹配规则存储在数据库中,启动时读取相关数据,替换掉functions字段,实现简单的模式匹配式的规则引擎。

例如

  1. 增加方法

    1
    2
    3
    4
    5
    addFunc "familyStructure" {
    params ->
    def ageDuration = params[0]
    return familyInsureds.count {i -> i.age >= ageDuration[0] && i.age <= ageDuration[1]}
    }
  2. 增加规则

    1
    addAction {familyInsureds.count({i -> i.relation == 3}) > 3} {multiply '1.144'}

    无论函数规则都可以存储在数据库中,且该规则类可以通过缓存动态刷新替换。

问题:

  1. 如何利用rete算法解决模式匹配的低效。
  2. 如何加速groovy代码的执行,解决预热问题。