Drools入门(一)——环境搭建

目的

本篇讲的是Drools规则引擎的基本使用,什么是规则引擎、以及搞清楚规则引擎在什么情况下比较适合使用。Drools支持以drl文件结尾的文件作为规则文件,也支持其他结尾的文件作为规则文件比如gdrlrdrldsl等(详情可见ResourceType.class),Drools还支持工作流等其他功能,本篇主要讲解的是drl规则文件的使用,不涉及工作流等其他功能,将分为几个章节进行讲解

准备环境

JDK (版本随意,作者使用1.8)
Maven (版本随意,作者使用3.6.3)
IDEA (版本随意,作者使用2020.1)

准备工作

新建一个maven项目,打开pom.xml导入Drools依赖,下面为剔除spring依赖的导入,没有spring依赖的项目可以不导入kie-spring



    org.kie
    kie-spring
    7.37.0.Final
    
    
        
            org.springframework
            spring-tx
        
        
            org.springframework
            spring-beans
        
        
            org.springframework
            spring-core
        
        
            org.springframework
            spring-context
        
        
            commons-lang3
            org.apache.commons
        
    


    org.drools
    drools-compiler
    7.37.0.Final

在maven项目的resources下面新建一个rules目录并在rules目录下新建demo.drl规则文件,目录的路径于规则里面的包名保持一致,否则会报警告虽然不影响使用

package rules

rule "test"
    when
        eval(true)
    then
        System.out.println("规则中打印日志:校验通过!");
end

main方法中添加一下代码并运行

public static void main(String[] args) {
    KieServices kieServices = KieServices.Factory.get();
    KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
    try {
        Enumeration resources = Demo.class.getClassLoader().getResources("rules/demo.drl");
        while (resources.hasMoreElements()){
            URL url = resources.nextElement();
            kieFileSystem.write(ResourceFactory.newFileResource(URLDecoder.decode(url.getPath())));
        }
        KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
        kieBuilder.buildAll();
        KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId());
        KieSession defaultKieSession = kieContainer.newKieSession(); //等价于KieSession defaultKieSession = kieContainer.newKieSession("defaultKieSession");
        defaultKieSession.fireAllRules();
        defaultKieSession.dispose();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

运行结果如下,打印出了规则中的结果

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
规则中打印日志:校验通过!

Process finished with exit code 0

你可能感兴趣的:(Drools入门(一)——环境搭建)