规则引擎Drools的入门使用

发布时间:2024年01月17日
  • pom依赖
    <!-- Drools规则引擎 -->
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-compiler</artifactId>
      <version>7.68.0.Final</version>
    </dependency>
    
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-mvel</artifactId>
      <version>7.68.0.Final</version>
    </dependency>
    
  • kmodule.xml文件配置
    kmodule.xml文件必须在resource/META-INF目录下创建,配置模板固定,内容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <kmodule xmlns="http://www.drools.org/xsd/kmodule">
    
      <!--
      name:配置kbase名称(保证唯一性),在getKieClasspathContainer("kbaseName");中进行指定
      packages:配置规则文件路径(路径必须配置正确否则找不到drl文件)
      default:配置当前kbase是否为默认(true || fasle)
      -->
      <kbase name="userBase" packages="rules" default="true">
          <!--
          name:配置ksession(保证唯一性),在newKieSession("ksessionName");中进行指定
          default:配置当前ksession是否为默认(true || fasle)
          -->
          <ksession name="userSession"/>
      </kbase>
    </kmodule>
    
  • drl规则文件配置
    kmodule.xml文件中指定的目录下创建drl文件,在IDEA中最好先安装好Drools插件,文件内容如下:
    package rules;
    
    import com.jin.bean.User
    rule "r1" // rule的名称必须保证唯一性
      when
          $user:User(age == 20)
      then
          System.out.println("用户信息: " + $user.toString());
    end
    
    关于文件中的语法就不细说了,有点基础就应该能看懂
  • 代码
    import com.jin.bean.User;
    import org.kie.api.KieServices;
    import org.kie.api.runtime.KieContainer;
    import org.kie.api.runtime.KieSession;
    
    public class DroolsDemo {
      public static void main(String[] args) {
          // 获取service
          KieServices ks = KieServices.Factory.get();
          // 获取container,如果kmodule.xml文件中没有指定默认kbase需要在getKieClasspathContainer("kBaseName")指定使用哪个kBase,如果配置了默认kBase则可以不用配置
          KieContainer container = ks.getKieClasspathContainer();
          // 获取session, session同样,配置文件中配置了默认session可以不进行指定,如果没有配置需要在newKieSession("kSessionName")进行指定
          KieSession session = container.newKieSession("session");
          User build = User.builder().age(20).build();
          // 插入实体对象
          session.insert(build);
          // 获取执行规则的数量
          int i = session.fireAllRules();
          // 获取执行结果
          session.getIdentifier();
          // 打印规则条数
          System.out.println("规则条数: " + i);
          // 关闭
          session.dispose();
      }
    }
    
  • 控制台结果
    [INFO] -org.drools.compiler.kie.builder.impl.KieContainerImpl -919 -org.drools.compiler.kie.builder.impl.KieContainerImpl.createKieBase(KieContainerImpl.java:487).createKieBase(487) | End creation of KieBase: HelloBase
    用户信息: User(name=null, age=20, gender=null, hobbit=null)
    规则条数: 1
    
文章来源:https://blog.csdn.net/AnameJL/article/details/135645704
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。