搭建最简单的Drool框架

    xiaoxiao2022-07-03  106

    maven配置:

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.blackfish.demo.drools</groupId> <artifactId>test</artifactId> <version>1.0-SNAPSHOT</version> <name>test</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <drools.version>6.1.0.Final</drools.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency> <dependency> <groupId>org.kie</groupId> <artifactId>kie-spring</artifactId> <version>${drools.version}</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-compiler</artifactId> <version>${drools.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> <plugin> <artifactId>maven-site-plugin</artifactId> <version>3.7.1</version> </plugin> <plugin> <artifactId>maven-project-info-reports-plugin</artifactId> <version>3.0.0</version> </plugin> </plugins> </pluginManagement> </build> </project>

    POJO类:

    public class Stu { private String name; private int age; private String gender; private int amount; public int getAmount() { return amount; } public void setAmount(int amount) { this.amount = amount; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Stu(String name,int age,String gender){ this.name=name; this.age=age; this.gender=gender; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("name : "); sb.append(this.name); sb.append(", age : "); sb.append(this.age); sb.append(", gender :"); sb.append(this.gender); sb.append(", amount : "); sb.append(this.amount); return sb.toString(); } }

    DRL文件:

    package test import com.blackfish.demo.drools.Stu; rule "rule1" salience 2 when $stu:Stu(age > 30) then System.out.println("age>30岁的人: " + $stu.getName()); $stu.setAmount(30000); end rule "rule2" salience 1 when $stu:Stu(gender=="male", age> 25) then System.out.println("性别为男,age>25的人: " + $stu.getName()); $stu.setAmount(8000); end rule "rule3" salience 3 when $stu:Stu(getName() == "张三") then System.out.println("名字为:" + $stu.getName()); $stu.setAmount(15000); end rule "rule4" salience 4 when $stu:Stu(getName() == "张三", gender == "male") then System.out.println("性别为男,名字为:" + $stu.getName()); $stu.setAmount(20000); end

    测试case:

    package com.blackfish.demo.drools; import org.drools.core.io.impl.ClassPathResource; import org.kie.api.io.ResourceType; import org.kie.internal.KnowledgeBase; import org.kie.internal.KnowledgeBaseFactory; import org.kie.internal.builder.KnowledgeBuilder; import org.kie.internal.builder.KnowledgeBuilderFactory; import org.kie.internal.definition.KnowledgePackage; import org.kie.internal.runtime.StatefulKnowledgeSession; import java.util.ArrayList; import java.util.Collection; import java.util.List; public class Test { public static void main(String[] args) { KnowledgeBuilder kb = new KnowledgeBuilderFactory().newKnowledgeBuilder(); kb.add(new ClassPathResource("test.drl"), ResourceType.DRL); Collection<KnowledgePackage> collection = kb.getKnowledgePackages(); KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); knowledgeBase.addKnowledgePackages(collection); StatefulKnowledgeSession statefulSession = knowledgeBase.newStatefulKnowledgeSession(); List<Stu> list = getStus(); for(Stu stu : list) { statefulSession.insert(stu); } statefulSession.fireAllRules(); statefulSession.dispose(); System.out.println("End ..."); for(Stu stu : list) { System.out.println(stu.toString()); } } public static List<Stu> getStus() { List<Stu> stus = new ArrayList<>(); stus.add(new Stu("张三", 16, "male")); stus.add(new Stu("huhu", 18, "male")); stus.add(new Stu("王五", 32, "male")); stus.add(new Stu("张红", 23, "female")); stus.add(new Stu("李四", 35, "male")); stus.add(new Stu("张小雅", 31, "female")); return stus; } }

    如果报找不到drl文件,按照下边的操作配置一下IDEA:

    https://blog.csdn.net/sinat_38301574/article/details/80465693#commentBox

     

    最新回复(0)