一、环境概述
Drools 7.0当前最新的是7.74.1 Final,Drools 8.0不兼容JDK8了(你发任你发,我用java8),7.73.0.Final这个兼容最稳定所以选这个

JDK:openjdk version "1.8.0_452"
Maven: maven 3.8.8
Drools:Drools 7.73.0.Final

二、项目依赖
当前为纯粹的Drools环境,没有引入Spring或者SpringBoot,Drools官方没有提供SpringBoot整合包,只有一个简单的Spring整合包。

<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><drools.version>7.73.0.Final</drools.version><slf4j.version>1.7.30</slf4j.version><logback.version>1.2.13</logback.version><mvel2.version>2.4.14.Final</mvel2.version><lombok.version>1.18.30</lombok.version><junit.version>4.13.2</junit.version></properties><dependencies><!-- Drools 核心依赖(必须) --><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>${drools.version}</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>${drools.version}</version></dependency><!-- 编译drl文件需要 --><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>${drools.version}</version></dependency><!-- drool-mvel --><dependency><groupId>org.drools</groupId><artifactId>drools-mvel</artifactId><version>${drools.version}</version></dependency><!-- mvel2 --><dependency><groupId>org.mvel</groupId><artifactId>mvel2</artifactId><version>${mvel2.version}</version></dependency><!-- 日志 SL4J+logback --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>${slf4j.version}</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>${logback.version}</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><scope>provided</scope></dependency><!-- junit 4 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency></dependencies>

三、实体、kmodule.xml以及测试的drl文件
src/main/java/com/online/admin/entity/Person.java

package com.online.admin.entity;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class Person
{private String name;private int age;
}

src/main/resources/META-INF/kmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里需要注意,kbase的那么可以随便起,但是packages的名称必须和你drl文件的package声明一致 -->
<kmodule xmlns="http://www.drools.org/xsd/kmodule"><kbase name="rules" packages="rules"><ksession name="ksession-rules"/></kbase>
</kmodule>

src/main/resources/rules/rule1.drl

package rules;import com.online.admin.entity.Person;rule "Age Check Rule"when$p : Person(age >= 18)thenSystem.out.println("[规则触发] " + $p.getName() + " 是成年人,年龄: " + $p.getAge());endrule "Check using eval"when$p : Person()eval( $p.getAge() >= 18 )thenSystem.out.println("条件满足");end

四、单元测试

import com.online.admin.entity.Person;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class AppTest {private static final Logger logger = LoggerFactory.getLogger(AppTest.class);@Testpublic void testRuleExecution() {KieServices kieServices = null;KieContainer kieContainer = null;KieSession kieSession = null;try {//1、获取KieServicekieServices = KieServices.Factory.get();if (kieServices == null) {throw new IllegalStateException("无法获取KieServices实例");}//2、获取KieContainerkieContainer = kieServices.getKieClasspathContainer();if (kieContainer == null) {throw new IllegalStateException("无法创建KieContainer");}//3、获取KieSessionkieSession = kieContainer.newKieSession("ksession-rules");if (kieSession == null) {throw new IllegalStateException("无法创建KieSession: ksession-rules");}//4、准备数据,插入事实对象Person adult = new Person("李四", 25);kieSession.insert(adult);//5、触发规则int firedRules = kieSession.fireAllRules();logger.info("执行的规则数量: {}", firedRules);}catch (IllegalArgumentException e){logger.error("参数错误: {}", e.getMessage(), e);throw e;}catch (IllegalStateException e){logger.error("状态错误: {}", e.getMessage(), e);throw e;}catch (Exception e){logger.error("规则执行过程中发生未知错误: {}", e.getMessage(), e);throw e;}finally{// 6. 释放KieSessionif (kieSession != null) {try{kieSession.dispose();logger.debug("KieSession已释放");}catch (Exception e){logger.warn("释放KieSession时发生错误: {}", e.getMessage());}}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!