drools

drools是JBoss公司开源的规则引擎

maven依赖

  <properties>
    <drools.version>7.5.0.Final</drools.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.kie</groupId>
      <artifactId>kie-api</artifactId>
      <version>${drools.version}</version>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-compiler</artifactId>
      <version>${drools.version}</version>
    </dependency>
    <dependency>
      <groupId>org.drools</groupId>
      <artifactId>drools-core</artifactId>
      <version>${drools.version}</version>
    </dependency>   
  </dependencies>

resource中创建META-INF目录,插入kmodul.xml

 

 modul.xml内容

<?xml version="1.0" encoding="utf-8" ?>
<kmodule xmlns="http://www.drools.org/xsd/kmodule">
    <kbase name="rules">//扫描的包名
        <ksession name="all-rules"></ksession>
    </kbase>
</kmodule>

编写规则文件

package namespace//相当于一个名称空间,同一空间的自定义函数可以共享

import com.Peolple;
global java.lang.List myList//定义了一个全局变量,在session中设置后全局可用

rule "rule-name"
salience 1 //属性部分,有很多属性:执行顺序、规则到期日期、更新后不循环   
when//条件部分
  $a: Peolple(age < 18)  $a绑定 javaBean对象Peolple
then//满足条件执行
  $a.setValid(false);
  update($a);//更新函数,还支持insert和retract
   myList.add("xx")//给上面定义的全局变量赋值
end

rule "rule-name2"
when
    xx
then
    String name = fun1("zhangsan");
end
//定义函数
function String func1(String name){
  return name+"xxx"; 
}

测试类

public static void main(String[] args) {
        KieServices kieServices = KieServices.Factory.get();
        //默认自动加载 META-INF/kmodule.xml
        KieContainer kieContainer = kieServices.getKieClasspathContainer();
        //kmodule.xml 中定义的 ksession name
        KieSession kieSession = kieContainer.newKieSession("all-rules");
        ArrayList myList = new ArrayList ();
        People peo = new People(); 
        kieSession.setGlobal("myList",myList);//放入全局变量
        kieSession.insert(peo);
        kieSession.fireAllRules();//可以指定过滤器选择执行的规则
        kieSession.dispose();
    }

 

posted @ 2022-06-01 19:56  扶不起的刘阿斗  阅读(604)  评论(0)    收藏  举报