Springboot整合Drools规则引擎
Drools
- 1,导入所需依赖
- 2,创建规则文件/resources/rules/helloworld.drl
- 3,编写配置类DroolsConfig.java
- 4,创建RuleService类,测试使用
- 5,在Controller使用
1,导入所需依赖
<!--drools规则引擎--><dependency><groupId>org.drools</groupId><artifactId>drools-compiler</artifactId><version>7.10.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-core</artifactId><version>7.10.0.Final</version></dependency><dependency><groupId>org.drools</groupId><artifactId>drools-templates</artifactId><version>7.10.0.Final</version></dependency><dependency><groupId>org.kie</groupId><artifactId>kie-api</artifactId><version>7.10.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.10.0.Final</version></dependency>
2,创建规则文件/resources/rules/helloworld.drl
package helloworld
rule "rule_helloworld"wheneval(true)thenSystem.out.println("规则:rule_helloworld触发...");
end
3,编写配置类DroolsConfig.java
package com.myqxin.sx.common.config;import org.kie.api.KieBase;
import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieRepository;
import org.kie.api.runtime.KieContainer;
import org.kie.internal.io.ResourceFactory;
import org.kie.spring.KModuleBeanFactoryPostProcessor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;import java.io.IOException;/*** @author: myqxin* @Desc: 规则引擎配置类* @create: 2021-09-13 14:07**/
@Configuration
public class DroolsConfig {// 指定规则文件存放目录,这里是可以根据自己存放的drl文件进行修改的private static final String RULES_PATH = "rules/";private final KieServices kieServices = KieServices.Factory.get();@Bean@ConditionalOnMissingBeanpublic KieFileSystem kieFileSystem() throws IOException {KieFileSystem kieFileSystem = kieServices.newKieFileSystem();ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();Resource[] files = resourcePatternResolver.getResources("classpath*:" + RULES_PATH + "*.*");String path = null;for (Resource file : files) {path = RULES_PATH + file.getFilename();kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));}return kieFileSystem;}@Bean@ConditionalOnMissingBeanpublic KieContainer kieContainer() throws IOException {KieRepository repository = kieServices.getRepository();repository.addKieModule(repository::getDefaultReleaseId);KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());kieBuilder.buildAll();return kieServices.newKieContainer(repository.getDefaultReleaseId());}@Bean@ConditionalOnMissingBeanpublic KieBase kieBase() throws IOException {return kieContainer().getKieBase();}@Bean@ConditionalOnMissingBeanpublic KModuleBeanFactoryPostProcessor kiePostProcessor() {return new KModuleBeanFactoryPostProcessor();}
}
4,创建RuleService类,测试使用
import org.kie.api.KieBase;
import org.kie.api.runtime.KieSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author: myqxin* @Desc:* @create: 2021-09-13 14:22**/
@Service
public class RuleService {@Autowiredprivate KieBase kieBase; // 主要是引用这个调用newKieSession()拿到会话对象public void rule(){// 获取会话对象,用于和规则引擎交互KieSession kieSession = kieBase.newKieSession();// 激活规则引擎,如果规则匹配成功则执行规则kieSession.fireAllRules();// 关闭会话kieSession.dispose();}
}
5,在Controller使用
@RestController
@RequestMapping("/hello")
public class HelloController {@Autowiredprivate RuleService ruleService;@RequestMapping("/rule")public String rule(){ruleService.rule();return "OK";}
}
控制台打印效果如下:
Springboot整合Drools规则引擎相关推荐
- SpringBoot整合Drools规则引擎动态生成业务规则
最近的项目中,使用的是flowable工作流来处理业务流程,但是在业务规则的配置中,是在代码中直接固定写死的,领导说这样不好,需要规则可以动态变化,可以通过页面去动态配置改变,所以就花了几天时间去研究 ...
- Spring Boot整合Drools规则引擎实例
1.DRools介绍 官网:https://www.drools.org/ 规则引擎主要完成的就是将业务规则从代码中分离出来. DRools一款由JBoss组织提供的基于Java语言开发的开源规则引擎 ...
- SpringBoot2 整合 Drools规则引擎,实现高效的业务规则
本文源码:GitHub·点这里 || GitEE·点这里 一.Drools引擎简介 1.基础简介 Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的 ...
- springboot2整合drools规则引擎(kie-spring+drools-core)
What&Why Drools? Drools(JBoss Rules )的前身是Codehaus的一个开源项目叫Drools,后来纳入JBoss门下,更名为JBoss Rules,成为了JB ...
- Flink整合Drools规则引擎
业务功能:根据告警规则,从告警流中将主告警和次告警进行关联. pom maven配置: <drools.version>6.5.0.Final</drools.version> ...
- 大数据风控项目实战 Drools规则引擎
可以借鉴的干货 1,统一存储服务,包含:多种存储库连接封装和服务封装 在统一存储服务 2.获取配置的环境 类:EnvVariable 一.风控项目介绍 对一个复杂支付系统提供统一.全面.高效的风险控制 ...
- 黑马Drools学习笔记(一)——Drools规则引擎示例概述以及SpringBoot整合示例
文章目录 1. 问题引出 2. 规则引擎概述 2.1 什么是规则引擎 2.2 使用规则引擎的优势 2.3 规则引擎应用场景 2.4 Drools介绍 3. Drools入门案例 3.1 业务场景说明 ...
- springboot中使用规则引擎Drools
文章目录 规则引擎的场景 规则引擎介绍 使用规则引擎的优势 规则引擎应用场景 rools介绍 Drools入门案例 规则引擎构成 Drools基础语法 springboot使用规则引擎 规则引擎的场景 ...
- SpringBoot整合Drools
文章目录 关于Drools 整合Drools 一般流程 快速整合 关于Drools 博客: 规则引擎 Drools 上面那篇博客详细的介绍了Drools,还要语法规则,关于什么是Drools,看这篇博 ...
- Drools 规则引擎
官网:https://www.drools.org/ 累了听听歌:http://www.hy57.com/p/158102.html 1. 快速度入门 1. 导入依赖 <dependencies ...
最新文章
- CentOS 7磁盘格式化
- 针对脑出血识别的AI匹配准确性
- 最落寞的C9高校:从未没落
- rabbit-mq cluster安装
- restful api_将Spring MVC RESTful Web服务迁移到Spring 4
- 64位传参利用方法LibcSearcher使用入门ROPgadget利用
- 用最科学的方法展示最形象的图表——前段数据可视化选型实践
- 设计模式---桥接模式
- 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
- 关于产品设计的一点儿感想
- H5搜索页调起软键盘
- 数据库系统常用的数据模型
- 一文读懂Faster RCNN(大白话,超详细解析)
- 量子恒道统计-淘宝添加步骤
- TSFS终端存储文件系统边缘计算项目介绍-海洋
- consul服务注册中心
- CRM系统-----学员管理系统---admin自定义开发2
- HTTPS学习笔记:(3)一文彻底了解PKI与证书
- Jsp(二)——简单的Jsp程序
- 源码学习之Vector