SpringBoot集成drools
1、背景
在之前的文章中,我们学习了drools
的一些基本语法,在这篇文章中,我们实现在SpringBoot
中集成drools
。
2、需求
我们需要在drools
中判断用户是否可以玩游戏。
规则一:
如果用户的年龄age>=18
,则可以
玩游戏。
规则二:
如果用户的年龄age<18
,则不可以
玩游戏。
3、实现
3.1 引入jar包
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-bom</artifactId>
<type>pom</type>
<version>7.69.0.Final</version>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.6.7</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-mvel</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
</dependencies>
此处引入drools
和springboot
的jar
包。
3.2 编写drools配置类
@Configuration
public class DroolsConfig {
@Bean
public KieContainer kieContainer() {
KieServices kieServices = KieServices.get();
return kieServices.getKieClasspathContainer();
}
}
3.3 编写Person对象
此处可以简单的理解为drools
中的Fact
对象。插入到drools中的工作内存后就是Fact
对象。
@Data
@AllArgsConstructor
public class Person {
private String name;
private Integer age;
// 是否可以玩游戏,此字段的值,由 drools 引擎计算得出
private Boolean canPlayGame;
}
canPlayGame
:此字段的值是由drools
引擎计算得出的。
3.4 编写drl文件
package rules
import com.huan.drools.fact.Person
// 用户可以玩游戏
rule "rule_person_can_play_game"
when
$person: Person( age >= 18)
then
$person.setCanPlayGame(true);
System.out.println("触发规则:" + drools.getRule().getName());
end
// 用户不可以玩游戏
rule "rule_person_Can't_play_game"
when
$person: Person( age < 18)
then
$person.setCanPlayGame(false);
System.out.println("触发规则:" + drools.getRule().getName());
end
上方编写了2个规则,都是根据age
来进行判断的,从而计算出用户是否可以玩游戏canPlayGame
。
3.5 编写kmodule.xml文件
kmodule.xml
的路径位于 src/main/resources/META-INF
目录下。
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
<kbase name="kabse" packages="rules" default="false">
<ksession name="ksession" default="false" type="stateful">
<consoleLogger/>
<listeners>
<ruleRuntimeEventListener type="org.kie.api.event.rule.DebugRuleRuntimeEventListener"/>
<processEventListener type="org.drools.core.event.DebugProcessEventListener"/>
<agendaEventListener type="org.drools.core.event.DebugAgendaEventListener"/>
</listeners>
</ksession>
</kbase>
</kmodule>
3.6 编写Controller触发规则
@RestController
public class PersonController {
private final KieContainer kieContainer;
public PersonController(KieContainer kieContainer) {
this.kieContainer = kieContainer;
}
/**
* 调用drools rule判断用户是否可以玩游戏
*/
@GetMapping("canPlayGame")
public Person canPlayGame(Person person) {
KieSession kieSession = kieContainer.newKieSession("ksession");
try {
kieSession.insert(person);
kieSession.fireAllRules();
} finally {
kieSession.dispose();
}
return person;
}
}
3.7 测试
3.7.1 用户的年龄>=18岁
➜ curl http://localhost:8081/canPlayGame\?name\=huan\&age\=20
{"name":"huan","age":20,"canPlayGame":true}
可以看出drools中计算出来的canPlayGame
值为`true
3.7.2 用户的年龄<18岁
➜ curl http://localhost:8081/canPlayGame\?name\=huan\&age\=16
{"name":"huan","age":20,"canPlayGame":false}
可以看出drools中计算出来的canPlayGame
值为false
4、完整代码
https://gitee.com/huan1993/spring-cloud-parent/tree/master/drools/drools-integrated-springboot
SpringBoot集成drools的更多相关文章
- springboot集成drools的方式一
springboot集成drools的方式一(spring-drools.xml) 本文springboot采用1.5.1.RELEASE版本,drools采用的6.5.0.Final,一共会讲三种方 ...
- springboot 2.x 集成 drools 7.x
简介:springboot 2.0.4.RELEASE 集成 drools 7.11.0.Final 1.项目结构 2. pom.xml文件 <?xml version="1.0&qu ...
- 《Drools7.0.0.Final规则引擎教程》之Springboot集成
本来准备按部就班的一章一章更新Drools相关教程,怎奈QQ群组(593177274)有朋友急需Springboot与Drools的集成demo,于是抽出时间写了一个,现在拿出来分享一下.加入群组可免 ...
- 【springBoot】springBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- SpringBoot集成security
本文就SpringBoot集成Security的使用步骤做出解释说明.
- springboot集成Actuator
Actuator监控端点,主要用来监控与管理. 原生端点主要分为三大类:应用配置类.度量指标类.操作控制类. 应用配置类:获取应用程序中加载的配置.环境变量.自动化配置报告等与SpringBoot应用 ...
- SpringBoot集成Shiro并用MongoDB做Session存储
之前项目鉴权一直使用的Shiro,那是在Spring MVC里面使用的比较多,而且都是用XML来配置,用Shiro来做权限控制相对比较简单而且成熟,而且我一直都把Shiro的session放在mong ...
- SpringBoot集成redis的key,value序列化的相关问题
使用的是maven工程 springBoot集成redis默认使用的是注解,在官方文档中只需要2步; 1.在pom文件中引入即可 <dependency> <groupId>o ...
- springboot集成mybatis(二)
上篇文章<springboot集成mybatis(一)>介绍了SpringBoot集成MyBatis注解版.本文还是使用上篇中的案例,咱们换个姿势来一遍^_^ 二.MyBatis配置版(X ...
- springboot集成mybatis(一)
MyBatis简介 MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到了google code,并且改名为MyB ...
随机推荐
- JS LeetCode 303. 区域和检索 - 数组不可变,一维数组的前缀和
壹 ❀ 引 本题来自LeetCode303. 区域和检索 - 数组不可变,属于一道简单题,不过题目期望的做法我也是看了题解才懂得,这里大致做个记录,题目描述如下: 给定一个整数数组 nums,求出数组 ...
- FireFox 报错Security Connection Failed解决方案
1.在浏览器中输入:about:config; 2.搜索security.ssl.enable_ocsp_stapling,双击将其修改为FALSE: 3.返回重新访问之前的网站,问题解决
- zTree如何实现模糊查找实战
1.说明 最近在研究zTree树控件.过程中涉及到了实现模糊查找结点的功能,特此分享一下. 有关zTree的有关介绍和使用,请访问其官网:zTree -- jQuery 树插件 本文假设你已经比较熟悉 ...
- junit多个测试方法共享变量
本文介绍利用类的静态属性实现junit多个测试方法间共享同一变量值. package com.laoxu.gamedog; import org.junit.Test; /** * @author x ...
- 网站(>???<)
http://cpeditor.org/ https://csacademy.com/app/graph_editor/ https://www.cnblogs.com/zhangyi1357/p/1 ...
- 类型注解Callable
from collections.abc import Callable """ Callable[[ParamType1, ParamType2], ReturnTyp ...
- Nebula Graph 源码解读系列 | Vol.05 Scheduler 和 Executor 两兄弟
本文首发于 Nebula Graph Community 公众号 上篇我们讲述了 Query Engine Optimizer 部分的内容,在本文我们讲解下 Query Engine 剩下的 Sche ...
- Java 常用类 String类与其他结构之间的转换-----String 与 byte[]之间的转换
1 /** 2 * 3 * String 与 byte[]之间的转换 4 * 编码:String ---> byte[]:调用String的getBytes() 5 * 解码:byte[]--- ...
- Java 线程通信的应用:经典例题:生产者/消费者问题
1 package bytezero.threadcommunication; 2 3 /** 4 * 线程通信的应用:经典例题:生产者/消费者问题 5 * 6 * 7 * 8 * @author B ...
- Docker下搭建Redis集群并实现动态扩/缩容
一.Redis集群方案的简单介绍 Redis集群的方案一般分为三种: 哈希取余分区 一致性哈希算法分区 哈希槽分区(本文介绍的就是这种) 1.哈希取余分区: 优点: 简单粗暴,只要提前预估好数据量,然 ...