JBoss Drools中提供了一个类KieScanner,可以支持从Maven存储库动态的加载并更新规则。官方给出的例子没有很好的证明这一能力,笔者经过几天研究,成功实验出了如何达到动态更新的效果,整理出来供大家参考。相关的源代码可以从Gitee下载。
程序结构和运行目标
如图所示,演示项目共包含四个项目:
- my-dynamic-rule: 父项目
- my-kjar: 一个kjar项目,其中包含了kmodule.xml文件和Drools规则.drl文件
- my-dynamic-engine: 一个Spring Boot项目,规则引擎运行于此,对外提供Rest服务
- my-model: 一个简单Java项目,包含my-kjar和my-dynamic-engine项目依赖的模型POJO
规则引擎服务my-dynamic-engine中并不包含规则,服务启动时,将从Maven存储库中拉取my-kjar项目,并加载其中的规则。启动以后,规则引擎服务将不停的监视Maven存储库中的my-kjar是否更新,如果更新则更新其中新的规则,规则引起服务本身不需重新启动。
my-kjar项目
my-kjar项目是一个kjar项目,其中包含了kmodule.xml文件和Drools规则.drl文件。kjar项目是指引入了kie-maven-plugin插件,并指定打包为kjar,在打包的过程中,插件会校验以drl定义的规则是