栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Drools规则引擎使用入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Drools规则引擎使用入门

参考书籍:《Drools规则引擎技术指南》来志辉 | 微信读书

最简单的示例

规则引擎的配置方式最基本的方式有2种,一个是静态配置文件,另一个是动态加载

静态配置文件
动态加载配置

(一) 静态配置文件方式
  1. 新建一个空maven项目
  2. resoures下建meta-INF目录,并新建kmodule.xml文件
  3. resoures下建reules.collect文件夹, 并新建一个drools-rule1.drl文件
  4. src 下新建com.pojo包路径,新建一个Person类
  5. 建立一个测试类,这里是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();
    }

直接运行即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353228.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号