千家信息网

SpringBoot2中如何整合Drools规则引擎

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本文小编为大家详细介绍"SpringBoot2中如何整合Drools规则引擎",内容详细,步骤清晰,细节处理妥当,希望这篇"SpringBoot2中如何整合Drools规则引擎"文章能帮助大家解决疑惑
千家信息网最后更新 2026年11月01日SpringBoot2中如何整合Drools规则引擎

本文小编为大家详细介绍"SpringBoot2中如何整合Drools规则引擎",内容详细,步骤清晰,细节处理妥当,希望这篇"SpringBoot2中如何整合Drools规则引擎"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、Drools引擎简介

1、基础简介

Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。具有易于访问企业策略、易于调整以及易于管理的特点,作为开源业务规则引擎,符合业内标准,速度快、效率高。

2、规则语法

(1)、演示drl文件格式

package droolRule ;import org.slf4j.Loggerimport org.slf4j.LoggerFactory ;dialect "java"rule "paramcheck1"  when   then    final Logger LOGGER = LoggerFactory.getLogger("param-check-one 规则引擎") ;    LOGGER.info("参数");end

(2)、语法说明

· 文件格式

可以 .drl、xml文件,也可以Java代码块硬编码;

· package

规则文件中,package是必须定义的,必须放在规则文件第一行;

· import

规则文件使用到的外部变量,可以是一个类,也可以是类中的可访问的静态方法;

· rule

定义一个规则。paramcheck1规则名。规则通常包含三个部分:属性、条件、结果;

二、整合SpringBoot框架

1、项目结构

SpringBoot2 整合 Drools规则引擎,实现高效的业务规则

2、核心依赖

  org.drools  drools-core  7.6.0.Final  org.drools  drools-compiler  7.6.0.Final  org.drools  drools-templates  7.6.0.Final  org.kie  kie-api  7.6.0.Final  org.kie  kie-spring  7.6.0.Final

3、配置文件

@Configurationpublic class RuleEngineConfig {  private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineConfig.class) ;  private static final String RULES_PATH = "droolRule/";  private final KieServices kieServices = KieServices.Factory.get();  @Bean  public 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();      LOGGER.info("path="+path);      kieFileSystem.write(ResourceFactory.newClassPathResource(path, "UTF-8"));    }    return kieFileSystem;  }  @Bean  public KieContainer kieContainer() throws IOException {    KieRepository kieRepository = kieServices.getRepository();    kieRepository.addKieModule(kieRepository::getDefaultReleaseId);    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem());    kieBuilder.buildAll();    return kieServices.newKieContainer(kieRepository.getDefaultReleaseId());  }  @Bean  public KieBase kieBase() throws IOException {    return kieContainer().getKieBase();  }  @Bean  public KieSession kieSession() throws IOException {    return kieContainer().newKieSession();  }  @Bean  public KModuleBeanFactoryPostProcessor kiePostProcessor() {    return new KModuleBeanFactoryPostProcessor();  }}

这样环境整合就完成了。

三、演示案例

1、规则文件

规则一

dialect "java"rule "paramcheck1"salience 99when queryParam : QueryParam(paramId != null && paramSign.equals("+"))  resultParam : RuleResult()then  final Logger LOGGER = LoggerFactory.getLogger("param-check-one 规则引擎") ;  LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());  RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;  ruleEngineService.executeAddRule(queryParam);  resultParam.setPostCodeResult(true);end

规则二

dialect "java"rule "paramcheck2"salience 88when queryParam : QueryParam(paramId != null && paramSign.equals("-"))  resultParam : RuleResult()then  final Logger LOGGER = LoggerFactory.getLogger("param-check-two 规则引擎") ;  LOGGER.info("参数:getParamId="+queryParam.getParamId()+";getParamSign="+queryParam.getParamSign());  RuleEngineServiceImpl ruleEngineService = new RuleEngineServiceImpl() ;  ruleEngineService.executeRemoveRule(queryParam);  resultParam.setPostCodeResult(true);end

规则说明:

A、salience 的值越大,越优先执行;

B、规则流程:如果paramId不为null,参数标识是+号,执行添加规则,-号,执行移除规则操作。

2、规则执行代码

@Servicepublic class RuleEngineServiceImpl implements RuleEngineService {  private static final Logger LOGGER = LoggerFactory.getLogger(RuleEngineServiceImpl.class) ;  @Override  public void executeAddRule(QueryParam param) {    LOGGER.info("参数数据:"+param.getParamId()+";"+param.getParamSign());    ParamInfo paramInfo = new ParamInfo() ;    paramInfo.setId(param.getParamId());    paramInfo.setParamSign(param.getParamSign());    paramInfo.setCreateTime(new Date());    paramInfo.setUpdateTime(new Date());    ParamInfoService paramInfoService = (ParamInfoService)SpringContextUtil.getBean("paramInfoService") ;    paramInfoService.insertParam(paramInfo);  }  @Override  public void executeRemoveRule(QueryParam param) {    LOGGER.info("参数数据:"+param.getParamId()+";"+param.getParamSign());    ParamInfoService paramInfoService = (ParamInfoService)SpringContextUtil.getBean("paramInfoService") ;    ParamInfo paramInfo = paramInfoService.selectById(param.getParamId());    if (paramInfo != null){      paramInfoService.removeById(param.getParamId()) ;    }  }}

3、规则调用接口

@RestController@RequestMapping("/rule")public class RuleController {  @Resource  private KieSession kieSession;  @Resource  private RuleEngineService ruleEngineService ;  @RequestMapping("/param")  public void param (){    QueryParam queryParam1 = new QueryParam() ;    queryParam1.setParamId("1");    queryParam1.setParamSign("+");    QueryParam queryParam2 = new QueryParam() ;    queryParam2.setParamId("2");    queryParam2.setParamSign("-");    // 入参    kieSession.insert(queryParam1) ;    kieSession.insert(queryParam2) ;    kieSession.insert(this.ruleEngineService) ;    // 返参    RuleResult resultParam = new RuleResult() ;    kieSession.insert(resultParam) ;    kieSession.fireAllRules() ;  }}

读到这里,这篇"SpringBoot2中如何整合Drools规则引擎"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

规则 引擎 文件 整合 参数 代码 文章 业务 内容 数据 格式 环境 简介 编码 语法 演示 复杂 妥当 一行 三个 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 互联网科技有限公司 互联网科技名片 博彦科技互联网金融 互联网络科技有限公司 万易互联网科技有限公司 奇酷互联网络科技 互联网 新科技 成都玖崟互联网科技有限公司乐商圈怎么样 互联网科技与管理 湖南一路畅行互联网科技 开一家科技互联网公司需要多少钱 996高科技互联网公司 企晟互联网信息科技有限公司 深圳艾果互联网通讯科技 中和天地互联网科技有限公司 锡山区互联网智能科技产品供应 黑科技 体验场景 互联网大会 陕西九四连强互联网科技有限公司 玉溪新华互联网科技怎么选 互联网科技生活的内容 广州慧亚互联网科技怎么样 科技与互联网哪个更好 乌苏新华互联网科技做什么的 恒生互联网科技业指数调整周期 山东有哪些互联网科技公司 每天都有哪些好的互联网科技 珠海东科互联网科技有限公司 普陀区互联网教育科技管理办法 易租星互联网科技有限公司
0