规则引擎Drools使用 第十五篇 Spring Boot整合Drools

2023-11-04

在实际开发中,主要使用的还是以Spring Boot为主,所有下面介绍下Spring Boot整合Drools.

Spring Boot整合Drools 引入依赖:

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <!--drools规则引擎-->
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-core</artifactId>
            <version>7.6.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-compiler</artifactId>
            <version>7.6.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.drools</groupId>
            <artifactId>drools-templates</artifactId>
            <version>7.6.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-api</artifactId>
            <version>7.6.0.Final</version>
        </dependency>
        <dependency>
            <groupId>org.kie</groupId>
            <artifactId>kie-spring</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-tx</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-beans</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring-context</artifactId>
                </exclusion>
            </exclusions>
            <version>7.6.0.Final</version>
        </dependency>

注意要配置加载资源路径,你可以在pom里面配置:

      <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.*</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

但是不推荐,配置静态资源路径可以直接在启动文件application.properties配置或者直接写一个配置类,一般推荐使用编写配置类。

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
        /**
         * 静态资源加载配置
         */
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
            registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
            registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
            registry.addResourceHandler("/rules/**").addResourceLocations("classpath:/rules/");
        }
}

编写配置类DroolsConfig

@Configuration
public class DroolsConfig {
    private static final String RULES_PATH = "rules/";
    private final KieServices kieServices = KieServices.Factory.get();

    private KieServices getKieServices() {
        return KieServices.Factory.get();
    }

    @Bean
    @ConditionalOnMissingBean
    public KieFileSystem kieFileSystem() throws IOException {
        KieFileSystem kieFileSystem = getKieServices().newKieFileSystem();
        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();

        //得到单个文件路径
//        org.kie.api.io.Resource resource = kieServices.getResources().newClassPathResource("classpath*:" + RULES_PATH + "*.*");
//        resource.setResourceType(ResourceType.DRL);

        Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");
        String path = null;
        for (Resource file : files) {
            path = RULES_PATH + file.getFilename();
            org.kie.api.io.Resource resource = ResourceFactory.newClassPathResource(path, "UTF-8");
            resource.setResourceType(ResourceType.DRL);

            kieFileSystem.write(resource);
        }
        return kieFileSystem;
    }

    @Bean
    @ConditionalOnMissingBean
    public KieContainer kieContainer() throws IOException {
        KieRepository kieRepository = getKieServices().getRepository();
        kieRepository.addKieModule(kieRepository::getDefaultReleaseId);
        KieBuilder kieBuilder = getKieServices().newKieBuilder(kieFileSystem());
        kieBuilder.buildAll();

        KieContainer kieContainer = getKieServices().newKieContainer(kieRepository.getDefaultReleaseId());
        return kieContainer;
    }


    @Bean
    @ConditionalOnMissingBean
    public KieBase kieBase() throws IOException {
        KieBase kieBase = kieContainer().getKieBase();
        return kieBase;
    }

    @Bean
    @ConditionalOnMissingBean
    public KieSession kieSession() throws IOException {
        KieSession kieSession = kieBase().newKieSession();
//        kieSession.dispose();
        return kieSession;
    }

    @Bean
    @ConditionalOnMissingBean
    public KModuleBeanFactoryPostProcessor kiePostProcessor() {
        return new KModuleBeanFactoryPostProcessor();
    }


    @Bean
    @ConditionalOnMissingBean
    public KieHelper kieHelper() {

        return new KieHelper();
    }

}

创建RuleService类

import org.kie.api.KieBase;
import org.kie.api.runtime.KieSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
​
@Service
public class RuleService {
    @Autowired
    private KieBase kieBase;
    public void rule(){
        KieSession kieSession = kieBase.newKieSession();
        kieSession.fireAllRules();
        kieSession.dispose();
    }
}

上面就完成了sring Boot整合Drools

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

规则引擎Drools使用 第十五篇 Spring Boot整合Drools 的相关文章

  • Devs--开源规则引擎介绍

    Devs Devs是一款轻量级的规则引擎 开源地址 https github com CrankZ devs 基础概念 此规则引擎的基础概念有字段 条件 规则等 其中字段组成条件 条件组成规则 并且支持多个条件通过与或组成一个规则 下面用常
  • 规则引擎Drools使用 第十四篇 Spring整合Drools

    使用Spring管理整合drools 首先需要引入依赖 然后配置spring文件 引入依赖
  • 规则引擎Drools使用 第一篇 规则引擎认知

    规则引擎有什么用呢 可以在那些实际场景使用呢 思考这样一个问题 申请信用卡 每个人去申请信用卡的时候 都会经过一遍核查 这个核查过程其实就可以当做是根据规则 去校验你的信息是否符合规则 只有符合规则的才可以申请信用卡 还记得以前自己写的那些
  • 规则引擎Drools使用 第五篇 Drools内置方法

    Drools内置方法 规则文件的RHS部分的主要作用是通过插入 删除或修改工作内存中的Fact数据 来达到控制规则引擎执行的目的 Drools提供了一些方法可以用来操作工作内存中的数据 操作完成后规则引擎会重新进行相关规则的匹配 原来没有匹
  • 如何通过 ant 构建脚本编译 .drl 文件

    我是流口水的新手 我想知道是否可以使用某种可以在 Windows 命令行 shell cmd 中输入的命令来编译 drl 文件 我查看了 drools 发行版附带的二进制文件 但我无法找到编译 drl 文件的方法 我对这样的命令感兴趣的原因
  • 流口水基于时间的限制和“现在”

    我们正在尝试写一个流口水 上面写着 如果事件发生在上周 则执行后果 我们有表示事件发生时间的常规 java 日期对象 但我们不确定如何在流口水的 LHS 中表达我们希望该日期对象在上周发生 重要的是 一周的时间跨度是任意的 它可以随时更改为
  • 在运行时动态更新规则。流口水+弹簧靴

    所以目前我正在练习将 Drools 7 13 0 Final 与 Spring boot 1 5 12 RELEASE 一起使用 我用以下类在 Spring boot 中制作了一个示例应用程序 模型 TaxiFare java Data p
  • 流口水查询。它们是如何评估和执行的?

    我正在概念验证应用程序中评估 Drools 6 我要么误解了 Drools 中的查询是如何工作的 要么是我没有正确实现某些功能 有人可以向我解释一下这种行为吗 我有一条规则应该对经过验证的记录起作用 如下所示 rule Patient In
  • 如何在drools中调用Java函数?

    我想从 Utils 类调用 Java 函数 该函数调用 JPA Repository 方法来检索自定义对象 我想从 Drools 决策表中调用这个函数 现在 这个简单的函数给出了空指针异常 我已经为此浪费了几个小时 我在决策表的 导入 部分
  • org.xml.sax.SAXParseException:cvc-complex-type.2.4.c:匹配通配符严格

    org xml sax SAXParseException cvc complex type 2 4 c The matching wildcard is strict but no declaration can be found for
  • Drools(专家系统)与 Android 项目的集成

    我有兴趣使用 Drools JBoss 专家系统基于规则的系统开发 Android 应用程序 它通过 Eclipse 每个工具 v3 2 都有一个插件 但我不完全知道如何成功地将 Drools Jars 集成到 Android 项目中 有一
  • 使用 Drools Workbench 和 KIE 服务器的 HelloWorld

    将 KIE Drools Workbench 6 2 0 Final 安装在 JBoss 7 Application Server 本地实例中 将 Kie Server 6 2 0 Final 安装在本地 Tomcat 7 实例中 严格使用
  • Spring-Drools 集成:引用的文件 (kie-spring.xsd) 包含错误

    我正在尝试将 drools 与 Spring 一起使用 春季版本4 01 Drools Kie 版本 6 0 1 我的 kie context xml 有以下错误 在 Eclipse 中 引用的文件包含错误 http drools org
  • 规则引擎Drools的入门使用

    pom 依赖
  • Scala 中的 Drools Expert 输出对象

    我是 Scala 和 Drools Expert 的新手 需要一些帮助来从 Drools 会话中获取信息 我已经成功设置了一些由 Drools 规则操作的 Scala 类 现在我想创建一个对象来存储一组输出事实 以便在 Drools 外部进
  • 使用Drools 6 Maven架构完全离线

    我正在使用 Drools 6 0 1 并利用新的基于 Maven 的架构来部署我的规则 该项目的 POM 如下所示 我用参数启动项目 Dkie maven settings custom X maven2 settings xml 为 Dr
  • Drools 知识库 已弃用

    我正在将 Drools 规则引擎集成到我的应用程序中 我发现的 99 的入门示例如下 KnowledgeBuilder kbuilder KnowledgeBuilderFactory newKnowledgeBuilder kbuilde
  • 如何使用 JSR94 通过 Drools 加载基于 Excel 的决策表?

    网上有很多关于如何加载 Drools DRL 规则集的示例 但是 我似乎找不到任何有关如何使用 JSR94 API 加载 Excel 格式的决策表的说明或示例 有谁知道如何做到这一点 如果是的话 您能提供一个简单的代码示例吗 下面是我正在使
  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object
  • 流口水中的无状态与有状态会话行为

    我是新来的流口水 我试图了解 Drools 提供的无状态会话和有状态会话之间的区别 据我初步了解 在无状态会话的情况下 如果在任何规则的操作执行期间修改了事实 则不会重新提交给推理引擎来查找与修改的事实相匹配的新规则 在有状态会话的情况下

随机推荐