Spring Boot中Drools规则引擎怎么用

avatar
作者
筋斗云
阅读量:0

在 Spring Boot 中使用 Drools 规则引擎主要包括以下几个步骤:

  1. 添加依赖

在你的 pom.xml 文件中添加 Drools 和 Spring Boot 相关的依赖:

    <!-- Spring Boot Starter -->    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter</artifactId>     </dependency>      <!-- Drools -->    <dependency>        <groupId>org.drools</groupId>        <artifactId>drools-compiler</artifactId>        <version>7.59.0.Final</version>     </dependency>    <dependency>        <groupId>org.drools</groupId>        <artifactId>drools-core</artifactId>        <version>7.59.0.Final</version>     </dependency>    <dependency>        <groupId>org.drools</groupId>        <artifactId>drools-decisiontables</artifactId>        <version>7.59.0.Final</version>     </dependency> </dependencies> 
  1. 创建规则文件

src/main/resources 目录下创建一个名为 rules 的文件夹,然后在该文件夹中创建一个名为 sample.drl 的规则文件。在这个文件中编写你的 Drools 规则:

package com.example.drools  import com.example.drools.domain.Person;  rule "Sample Rule" when     $person: Person(age >= 18) then     System.out.println("Person is eligible for voting."); end 
  1. 创建实体类

com.example.drools.domain 包下创建一个名为 Person 的实体类:

package com.example.drools.domain;  public class Person {     private String name;     private int age;      // Getters and setters } 
  1. 配置 Drools

创建一个名为 DroolsConfig 的配置类,用于初始化 Drools 的 KieContainer

package com.example.drools.config;  import org.kie.api.KieServices; import org.kie.api.builder.KieBuilder; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieRepository; import org.kie.api.runtime.KieContainer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver;  import java.io.IOException;  @Configuration public class DroolsConfig {      @Bean     public KieContainer kieContainer() throws IOException {         KieServices kieServices = KieServices.Factory.get();         KieRepository kieRepository = kieServices.getRepository();         KieFileSystem kieFileSystem = kieServices.newKieFileSystem();          ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();         Resource[] resources = resourcePatternResolver.getResources("classpath*:/rules/*.*");          for (Resource resource : resources) {             kieFileSystem.write(resource.getFilename(), resource.getInputStream());         }          KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);         kieBuilder.buildAll();          return kieServices.newKieContainer(kieRepository.getDefaultReleaseId());     } } 
  1. 使用 Drools

在你的服务类中注入 KieContainer,并使用它来执行规则:

package com.example.drools.service;  import com.example.drools.domain.Person; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;  @Service public class DroolsService {      @Autowired     private KieContainer kieContainer;      public void executeRules(Person person) {         KieSession kieSession = kieContainer.newKieSession();         kieSession.insert(person);         kieSession.fireAllRules();         kieSession.dispose();     } } 
  1. 测试

在你的控制器或测试类中调用服务类的 executeRules 方法来测试 Drools 规则引擎:

package com.example.drools.controller;  import com.example.drools.domain.Person; import com.example.drools.service.DroolsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;  @RestController public class DroolsController {      @Autowired     private DroolsService droolsService;      @GetMapping("/test")     public String test() {         Person person = new Person();         person.setName("John Doe");         person.setAge(20);          droolsService.executeRules(person);          return "Rules executed successfully.";     } } 

现在,当你访问 /test 端点时,Drools 规则引擎将根据定义的规则执行。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!