SpringBoot集成drools的实现示例

网友投稿 1095 2022-10-03

SpringBoot集成drools的实现示例

SpringBoot集成drools的实现示例

目录1、背景2、需求3、实现3.1 引入jar包3.2 编写drools配置类3.3 编写Person对象3.4 编写drl文件3.5 编写kmodule.xml文件3.6 编写Controller触发规则3.7 测试4、完整代码

1、背景

在之前的文章中,我们学习了drools的一些基本语法,在这篇文章中,我们实现在SpringBoot中集成drools。

2、需求

我们需要在drools中判断用户是否可以玩游戏。

规则一:如果用户的年龄age>=18,则可以玩游戏。规则二:如果用户的年龄age<18,则不可以玩游戏。

3、实现

3.1 引入jar包

org.drools

drools-bom

pom

7.69.0.Final

import

org.springframework.boot

spring-boot-dependencies

2.6.7

import

pom

org.springframework.boot&http://lt;/groupId>

spring-boot-starter-web

org.drools

drools-compiler

org.drools

drools-mvel

org.projectlombok

lombok

1.18.22

此处引入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目录下。

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 {

kieShttp://ession.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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:山东省第八届 ACM 省赛 sum of power (求和、水)
下一篇:Codeforces 794 C. Naming Company (贪心)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~