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(); }

浙公网安备 33010602011771号