spring boot规则

Drools规则引擎入门demo

2019-06-16  本文已影响194人  kevin0016

简单介绍

互联网旧系统维护中往往存在非常多的规则(比如:age < 16 || age > 50 -> REJECT )。最便捷的实现就是用 if-else 来写,但是随着规则的增加以及需求的变动,代码将变得越来越难阅读和变动。这时候就要引入Drools等规则引擎了。Drools就是为了解决业务代码和业务规则分离的引擎。

开发环境搭建

intellij+maven环境下

 <dependency>
       <groupId>org.drools</groupId>
       <artifactId>drools-compiler</artifactId>
       <version>6.5.0.Final</version>
   </dependency>

hello world

<?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文件存储路径一致

@Getter
@Setter
public class Person {
    private String name ;
    private Integer age ;

    public Person(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
}
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
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();
    }
}
上一篇 下一篇

猜你喜欢

热点阅读