动态更新规则
上一章节讲述了 Drools7 和 Springboot2 集成使用,集成工作相对简单、可以快速开发。但是缺点也很明显,规则和配置文件绑定在项目中(耦合度太高)。如果你不需要修改规则文件,这种方式还是可以采纳的。此篇讲述如何从数据库中加载规则文件,动态加载更新规则。
KieHelper
Drools 中提供了 KieHelper ,可以动态添加规则,并且创建新的 kieContainer 返回。
// 借助 kieHelper 添加规则
KieHelper kieHelper = new KieHelper();
// 动态添加规则内容
kieHelper.addContent(content, ResourceType.DRL);
// 校验规则是否异常
Results results = kieHelper.verify();
if (results.hasMessages(Message.Level.ERROR)) {
System.out.println(results.getMessages());
throw new IllegalStateException("### errors ###");
}
// 重置 kieContainer
kieContainer = kieHelper.getKieContainer();
更新规则实现
添加依赖
<!--mybatis-plus启动器,规则文件放到数据库-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.43</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<!--drools-->
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-spring</artifactId>
<version>${drools.version}</version>
<exclusions>
<!-- 依赖的spring版本全部以spring boot依赖的为准 -->
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</