drools使用过程中遇到的坑 (零)

最近公司的开发任务是规则引擎这个东西。 大概想要做成的东西是这个亚子。
规则引擎示意

于是领导调查了一下,让我去看drools这个框架。
具体drools怎么用网上很多博客都有讲,我会把参考到的几个写的比较清楚的帖子贴在下面。

初识drools

第一次去看的时候,仅仅只是跟着demo走了一下,跟着写了一下drl,发现这个框架需要用到他自己的语法。一时间很难接受,于是草率的得出结论: 想要使用这个规则引擎,必须事先写好drl文件,而这个文件又很难生成。 因此这个框架不实用。

再遇drools

第二次去看的时候,深入理解了一下drl语法,也自己试着实现了一些自己的规则,期间踩了很多坑。像 遍历List、 when…then…有没有else啊 这些问题。在这里简单记录一下,等到上班去公司看着代码回忆一下有哪些问题是怎么解决的。

和drools的爱恨纠缠

在上面完成之后,我做出一个很怪的规则出来, 因为命题的链接都是or因此我认为,只要有一个为true整个命题就是ture,所以我使用了loop来轮询的判断每个命题,如果发现了一个true,就将结果置为true,并结束循环。
但是这种操作导致了只能做全or或者全and的命题连接, 如果出现and和or混用的情况,这是没法做的。
而且在执行的过程中发现了一个致命bug:每当规则执行到第22次的时候,都会报一个严重的错误。以前从来都没见过,而且去问领导,领导也说没见过。产生原因我并不清楚,但是我是将一个判断去除了以后解决的这个问题。所以我猜测可能是条件没写好导致无限循环,使得drools这个框架处理不过来导致的错误。

心满意足的接受drools的服务

再往后,想要支持and和or混用的这种情况,甚至想要支持带括号,有先后优先级的这种情况。我想了好多办法,都不可能做到动态的去判断。 最后只能使用拼接字符串的方法,将条件和逻辑运算符直接写在drl文件里。 将这条规则动态的加入到规则引擎中。


参考文章:
drools6入门例子(二)
Drools 7 遍历List集合
springboot2整合drools规则引擎(kie-spring+drools-core)
drools集成spring boot
drools 如何动态加载规则


   转载规则


《drools使用过程中遇到的坑 (零)》 echi1995 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
在spring整个服务启动后做一些事 在spring整个服务启动后做一些事
起因: 因为服务器启动时,保存的数据和node层保存的数据不一致。虽然有定时同步的功能,但是启动后到第一次同步之间有段真空期,所有这个问题最后评估下来是要修复的。 经过思考后,决定服务器启动时,向redis里推送一条消息提示前端要同步数据
2019-10-23
下一篇 
jvm的运行机制(一) java虚拟机示意图 jvm的运行机制(一) java虚拟机示意图
今天去看了一下jvm的机制, 在B站上看一个叫程序员诸葛讲的8月最新java虚拟机JVM运行机制讲解视频全集目前学到第6p, 会一点一点的将老师讲的课, 和在听课过程中记得笔记分享上来。 这篇博客的内容主要是jvm的结构,将画出示意图。 假
  目录