简单介绍
互联网旧系统维护中往往存在非常多的规则(比如:age < 16 || age > 50 -> REJECT )。最便捷的实现就是用 if-else 来写,但是随着规则的增加以及需求的变动,代码将变得越来越难阅读和变动。这时候就要引入Drools等规则引擎了。Drools就是为了解决业务代码和业务规则分离的引擎。
开发环境搭建
intellij+maven环境下
- 安装JBoss Drools Support插件。主要是为了intellij可以识别drools文件,使用快捷的智能提示。
- maven依赖中引入开发包
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>6.5.0.Final</version>
</dependency>
hello world
-
需求:判断一个人的 age < 16 || age > 50 的时候,打印年龄不符合要求。
1、创建maven工程,引入依赖
2、新建配置文件/src/resources/META-INF/kmodule.xml
3、新建drools规则文件/src/resources/rules/age.drl
项目结构图
image.png
-
kmodule.xml
<?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns="http://jboss.org/kie/6.0.0/kmodule">
<kbase name="hello" packages="drl">
<ksession name="ksession-hello"/>
</kbase>
</kmodule>
注意,此处的packages要和文件结构路径下的drl文件存储路径一致
- Person
@Getter
@Setter
public class Person {
private String name ;
private Integer age ;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
- age.drl
import com.koolearn.drools.po.Person // 导入类
dialect "mvel"
rule "age" // 规则名,唯一
when
$person : Person(age<16 || age>50) //规则的条件部分
then
System.out.println($person.getName()+":的年龄为"+$person.getAge()+"====不符合要求!");
end
rule "rightAge" // 规则名,唯一
when
$person : Person(age>=16 && age<=50) //规则的条件部分
then
System.out.println($person.getName()+":的年龄为"+$person.getAge()+"====符合要求!");
end
- test 类
public class HelloTest {
private static KieContainer container = null;
private KieSession statefulKieSession = null;
@Test
public void test() {
KieServices kieServices = KieServices.Factory.get();
container = kieServices.getKieClasspathContainer();
statefulKieSession = container.newKieSession("myAgeSession");
Person person = new Person("Kevin",12);
statefulKieSession.insert(person);
statefulKieSession.fireAllRules();
Person person2 = new Person("Jack",50);
statefulKieSession.insert(person2);
statefulKieSession.fireAllRules();
statefulKieSession.dispose();
}
}
-
运行调用
运行结果
网友评论