首页 » Web前端 » phprulerengine技巧_浅浅进修Spring下Drools规则引擎运用

phprulerengine技巧_浅浅进修Spring下Drools规则引擎运用

访客 2024-12-04 0

扫一扫用手机浏览

文章目录 [+]

规则引擎在业务研发中利用频率还是比较高的,尤其是面对繁芜、需灵巧变更的场景更加适宜。
以是趁着还算热乎,赶紧再熟习一小下。

Drools--java措辞开拓的开源业务规则引擎

DROOLS(JBOSS RULES )具有一个易于访问企业策略、易于调度以及易于管理的开源业务规则引擎,符合业内标准,速率快、效率高。
业务剖析师或审核职员可以利用它轻松查看业务规则,从而考验是否已编码的规则实行了所需的业务规则。
(www.drools.org.cn/)

phprulerengine技巧_浅浅进修Spring下Drools规则引擎运用

入门步骤1: 引入依赖

xml

复制代码

phprulerengine技巧_浅浅进修Spring下Drools规则引擎运用
(图片来自网络侵删)

<!-- Drools依赖 --> <dependency> <groupId>org.kie</groupId> <artifactId>kie-api</artifactId> <version>7.61.0.Final</version> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-spring</artifactId> <version>7.61.0.Final</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>7.61.0.Final</version> </dependency>

步骤2:增加kieContainer配置

KieContainer是Drools规则引擎的容器,它用于加载和管理规则文件。

通过KieContainer,我们可以获取到规则文件中定义的规则和规则集,并创建相应的KieSession工具。

KieContainer常日在运用程序启动时创建,并在全体运用程序的生命周期中重复利用。

java

复制代码

@Bean public KieContainer kieContainer() { KieServices kieServices = KieServices.get(); KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); // 配置规则文件所在路径 /src/main/resources/myrules/rules.drl kieFileSystem.write(ResourceFactory.newClassPathResource("myrules/rules.drl")); KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem).buildAll(); KieModule kieModule = kieBuilder.getKieModule(); return kieServices.newKieContainer(kieModule.getReleaseId()); }

步骤3: 编写规则文件drl

更加繁芜的编写规则可参考: www.drools.org.cn/161.html 这里可以通过全局变量global的办法将SpringBean注入到规则文件中利用。

java

复制代码

package myrules; import com.rules.engine.DroolsTestService import com..Person; // 注入Spring管理的Bean global com.rules.engine.DroolsTestService myService; rule "Adult Rule" when // 将规则赋值给$person变量 $person : Person() // 当参数中的age >=18时,进入then处理 Person(age >= 18) then // 调用Spring管理的Service处理 myService.elderThan18($person); System.out.println("The person is an adult"); end rule "Teenager Rule" when // 将规则赋值给$person变量 $person : Person() // 当参数中的age <18时,进入then处理 Person(age < 18) then // 调用Spring管理的Service处理 myService.youngerThan18($person); System.out.println("The person is a teenager"); end

步骤4: 规则触发

这里核心是基于kieSession触发规则。

KieSession是Drools规则引擎的实行环境,它用于实行规则。
在KieSession中,我们可以插入事实(Person),并调用规则引擎来匹配规则并实行匹配的规则。

KieSession供应了多种实行规则的方法,例如fireAllRules()用于实行所有匹配的规则。
KieSession常日在须要实行规则的时候创建,并在实行完规则后关闭。

也便是说,KieContainer用于加载和管理规则文件,而KieSession则供应了规则的实行环境,用于插入事实并实行规则。
通过这两个工具的合营利用,我们可以实现规则的加载、管理和实行。

java

复制代码

@Service @Slf4j public class DroolsService { @Autowired private KieContainer kieContainer; / 规则中须要利用的SpringBean / @Autowired private DroolsTestService droolsTestService; / 该方法用于将给定的Person工具运用到Drools规则中,并触发规则的实行。
@param person / public void applyRules(Person person) { // 创建一个KieSession KieSession kieSession = kieContainer.newKieSession(); try { // 通过设置全局变量到规则文件中去 kieSession.setGlobal("myService", droolsTestService); // 添加规则运行时势宜监听器,用于调试 kieSession.addEventListener(new DebugRuleRuntimeEventListener()); kieSession.addEventListener(new DebugAgendaEventListener()); // 将变量插入到规则中 kieSession.insert(person); // 触发规则 kieSession.fireAllRules(); } catch (Exception e) { log.error("applyRules error", e); } finally { kieSession.dispose(); } } }

步骤5: 验证一下

规则利用利用到的Service 代码

java

复制代码

@Service @Slf4j public class DroolsTestService { public void youngerThan18(Person person) { person.setName(person.getName() + "<----> youngerThan18"); } public void elderThan18(Person person) { person.setName(person.getName() + "<----> elderThan18"); } }

触发利用的controller

java

复制代码

@RestController @RequestMapping(value = "/ruleEngine") public class RuleEngineController { @Autowired private DroolsService droolsService; @PostMapping("/test") public Person test(@RequestBody Person person) { droolsService.applyRules(person); return person; } }

可以通过日志判断规则的实行情形,可以看到规则是命中了adult规则,并且也实行到了我们的Service中。
Adult规则测试:

Teenager规则测试:

标签:

相关文章

小米2S工程代码详细国产手机的崛起之路

小米2S作为小米公司旗下的一款经典手机,自2013年发布以来,凭借其出色的性能和亲民的价格,赢得了广大消费者的喜爱。本文将深入解析...

Web前端 2025-02-18 阅读0 评论0

探秘自定义报表代码数据呈现的魔法师

在信息化时代,数据已成为企业运营决策的重要依据。报表作为数据可视化的重要手段,越来越受到企业的关注。而自定义报表代码,则犹如数据呈...

Web前端 2025-02-18 阅读0 评论0