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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
如何在IDEA启动多个Spring Boot工程实例(图文)
这篇文章主要介绍了如何在IDEA启动多个Spring Boot工程实例(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-09-09IDEA 去除 mybatis.xml 文件黄色警告的图文教程
这篇文章主要介绍了IDEA 去除 mybatis.xml 文件黄色警告的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-07-07Netty分布式pipeline管道传播outBound事件源码解析
这篇文章主要介绍了Netty分布式pipeline管道传播outBound事件源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-03-03
最新评论