Skip to content
On this page

规则引擎中间件集成组件

Drools规则引擎集成统一组件。

可集成到SpringBoot工程,提供更高效便捷的访问方式,不需要配置繁琐的 kmodule.xml,同时无感知地实现规则文件的动态更新,适用于生产环境的热部署。

如何使用

(1)在pom.xml中引入依赖:

xml
<dependency>
		<groupId>com.chinapost.mids</groupId>
		<artifactId>cpms-drools-spring-boot-starter</artifactId>
		<version>1.0.0-RELEASE</version>
</dependency>

(2)在配置文件中指定规则文件的路径:

properties
################## 必填属性 ##################
# 指定规则文件目录,会自动扫描该目录下所有规则文件,决策表,以及CSV文件
# 支持classpath资源目录,如:classpath:drools/**/*.drl
spring.drools.path = C:\\DRL\\
################## 可选属性 ##################
# 也可以指定全局的mode,选择stream或cloud
spring.drools.mode = stream
# 指定规则文件自动更新的周期,单位秒,默认30秒扫描一次
spring.drools.update = 10
# 规则监听日志,默认开启(on = 开启,off = 关闭)
spring.drools.listener = on
# 关闭自动更新(不推荐)
spring.drools.auto-update = off

(3)使用注解方式引入KieTemplate

java
@Autowired
private KieTemplate kieTemplate;

(4)使用 kieTemplate 的 getKieSession 方法,指定规则文件名,就可以获取对应的 Session,可以传入多个规则文件,包括决策表

java
KieSession kieSession = kieTemplate.getKieSession("rule1.drl", "rule2.drl");
......

(5)结果展示

java
2020-09-10 16:51:08.344 DEBUG ===>>开始更新规则文件
2020-09-10 16:51:09.730 DEBUG ===>>插入对象:[fact 0:1:1571707504:1072693248:1:DEFAULT:NON_TRAIT:java.lang.Double:1.0];操作规则:null
2020-09-10 16:51:09.748 DEBUG ===>>匹配的规则:[Rule name=规则1-1, agendaGroup=MAIN, salience=0, no-loop=false]
2020-09-10 16:51:09.761 DEBUG ===>>开始执行Java代码块,匹配规则:[Rule name=规则1-1, agendaGroup=MAIN, salience=0, no-loop=false],评估对象:[[fact 0:1:1571707504:1072693248:1:DEFAULT:NON_TRAIT:java.lang.Double:1.0]]
.... 执行过程忽略 ....
2020-09-10 16:51:09.765 DEBUG ===>>结束执行Java代码块,匹配规则:[Rule name=规则1-1, agendaGroup=MAIN, salience=0, no-loop=false],评估对象:[[fact 0:1:1571707504:1072693248:1:DEFAULT:NON_TRAIT:java.lang.Double:1.0]]