参考书籍:《Drools规则引擎技术指南》来志辉 | 微信读书
最简单的示例规则引擎的配置方式最基本的方式有2种,一个是静态配置文件,另一个是动态加载
静态配置文件
动态加载配置
(一) 静态配置文件方式
- 新建一个空maven项目
- resoures下建meta-INF目录,并新建kmodule.xml文件
- resoures下建reules.collect文件夹, 并新建一个drools-rule1.drl文件
- src 下新建com.pojo包路径,新建一个Person类
- 建立一个测试类,这里是MainTest
- 新建一个空maven项目
- resoures下建meta-INF目录,并新建kmodule.xml文件
- resoures下建reules.collect文件夹, 并新建一个drools-rule1.drl文件
- src 下新建com.pojo包路径,新建一个Person类
- 建立一个测试类,这里是MainTest
以下几个是文件内容详解
pom文件引用maven包
org.drools drools-compiler 7.10.0.Final
kmodule.xml 文件内容
drools-rule1.drl文件内容
package rules.collect //当前drl文件所在resources中的路径
import com.pojo.Person //引用包是 Person 类的路径名
rule "test001"
when
eval(true);
then
System.out.println("Hello World");
end
rule "test002"
when
$p:Person(age>21,$n:name=="liuyb")
then
$p.setName("Banana");
update($p);
System.out.println("检查姓名:"+$n);
System.out.println("输出引用对象 "+$p);
end
实体类Person内容
@Data
public class Person {
private int age;
private String name;
}
测试代码
public static void main(String[] args) {
KieServices factory = KieServices.Factory.get();
KieContainer container = factory.getKieClasspathContainer();
KieSession session = container.newKieSession("rule_test1_session");
Person person = new Person();
person.setName("liuyb");
person.setAge(22);
session.insert(person);
int count = session.fireAllRules();
System.out.println("总共执行了条" + count + "规则");
session.dispose();
}
这样静态配置的方式就完成了, 执行MainTest测试代码
(二) 动态配置加载
这里是用字符串形式进行简单使用示例
将规则文件中的字符串全部拷贝出来,准备好
实战应用中规则内容比较少,可以通过数据库字段进行存取,量特别大时候要使用写配置文件的方式
测试代码
public static void main(String[] args) {
// 规则文本字符串
String drlStr = "package rules.collectn" +
"import com.pojo.Personn" +
"n" +
"rule "test001"n" +
" whenn" +
" eval(true);n" +
" thenn" +
" System.out.println("Hello World");n" +
"n" +
"endn" +
"n" +
"rule "test002"n" +
" whenn" +
" $p:Person(age>21,$n:name=="liuyb")n" +
" thenn" +
" $p.setName("Banana");n" +
" update($p);n" +
" System.out.println("检查姓名:"+$n);n" +
" System.out.println("输出引用对象 "+$p);n" +
"n" +
"end";
Person person = new Person();
person.setName("liuyb");
person.setAge(22);
KieHelper helper = new KieHelper();
helper.addContent(drlStr, ResourceType.DRL);
KieSession kieSession = helper.build().newKieSession();
kieSession.insert(person);
kieSession.fireAllRules();
kieSession.dispose();
}
直接运行即可



