规则引擎Drools的资料整理
规则引擎Drools的资料整理
1.Drools使用
官方文档:
https://docs.jboss.org/drools/release/7.25.0.Final/drools-docs/html_single/index.html
Idea:自带JBoss Drools Support 插件,直接在项目中引入jar包,新建.drl配置文件即可
Eclipse:需要安装drools插件和drools运行时,建议参考https://blog.csdn.net/sinat_25551085/article/details/83213701
2.Drools的规则文件.drl的基本结构
①package com.sample //包名,不可以与关键字冲突
②import com.sample.DroolsTest.Message;//本文件需要导入的类
③global java.util.List myGlobalList;//全局变量
④//定义函数体
function String hello(String name) {
return “Hello “+name+”!”;
}
⑤rule “myRule”
no-loop true //执行一次后,是否能被再次**
salience 100 //优先级别
⑥when
m : Message( status == Message.HELLO, message : message )
⑦then
m.setMessage( “Goodbye cruel world” );
m.setStatus( Message.GOODBYE );
update( m );
myGlobalList.add( “Hello World” );//使用global 变量
System.out.println( hello( “Bob” ) );//调用定义函数
End
详细解释:
③可以用于java程序与drl文件里的交互,定义一个全局变量,从java程序传入到drl文件
具体可见demo参考
④用于在drl文件中定义一个方法函数,与java程序方法定义一致,将drl文件里公共使用的代码封装成方法
⑤定义一个规则名,重点在于no-loop true及salience 100等语法
⑥⑦相当于java程序里的if(条件)else结构,⑥中条件可以有多种条件约束,如:
&& 和|| 约束,字符串约束,复合值约束(in和not in)
具体可参考:http://www.drools.org.cn/228.html
3.Drools在程序中的集成
(1):新建一个规则实体类
package com.example.droolstest.model;
public class Label {
private String sex;
private Integer age;
private Integer weight;
private Integer salary;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getWeight() {
return weight;
}
public void setWeight(Integer weight) {
this.weight = weight;
}
public Integer getSalary() {
return salary;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Label{" +
"sex='" + sex + '\'' +
", age=" + age +
", weight=" + weight +
", salary=" + salary +
'}';
}
}
(2):Pom文件引入jar包
<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.kie</groupId>
<artifactId>kie-spring</artifactId>
<version>${drools.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
</exclusions>
</dependency>
(3):新增一个DroolsConfig类,用于读取drl配置文件及开启kieSession和kieBuilder
(4):在java类中使用kieSession来触发规则文件
demo地址:https://github.com/kexiaobo/drools-test
4.Drools相关资料及论坛
http://www.drools.org.cn/
https://cloud.tencent.com/developer/search/article-drools
https://www.aliyun.com/ss/ZHJvb2xz6KeE5YiZ5byV5pOO/1_b
5.Drools调试,目前只找到在eclipse中的调试方法
https://www.yiibai.com/drools/drools_debugging.html