Drools 本人的使用实例

从BIOS到路由器:深入拆解SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)奥秘 本文深入解析SPI NOR Flash的硬件连接与‘芯片内执行’(XIP)技术,从BIOS到路由器的应用场景出发,详细介绍了其架构精髓、典型连接方案、时序设计及性能优化方法。通过实际案例和参数对比,帮助开发者掌握NOR Flash在嵌入式系统中的关键作用与设计技巧,提升电路设计效率与可靠性。 阅读详情
<!--drools-->
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-core</artifactId>
    <version>5.5.0.Final</version>
</dependency>
<dependency>
    <groupId>org.drools</groupId>
    <artifactId>drools-compiler</artifactId>
    <version>5.5.0.Final</version>
</dependency>



package com.sprucetec.tms.fee.service.impl.rule;

import com.alibaba.dubbo.common.utils.CollectionUtils;
import com.sprucetec.tms.fee.utils.RuleBaseFacatory;
import com.sprucetec.tms.fee.service.rule.RuleEngineService;
import org.drools.RuleBase;
import org.drools.StatefulSession;
import org.drools.compiler.PackageBuilder;
import org.drools.spi.AgendaFilter;
import org.springframework.stereotype.Service;

import java.io.Reader;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by duyinqiang on 2016/12/12.
 * 规则接口实现类 .
 */
@Service
public class RuleEngineServiceImpl implements RuleEngineService {
    private RuleBase ruleBase;

    /**
     * 初始化规则引擎.
     *
     * @param drlRuleDomains
     */
    public void initEngine(List<String> drlRuleDomains) {
        // 设置时间格式
        System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm:ss");
        try {
            synchronized (this) {
                ruleBase = RuleBaseFacatory.getRuleBase();
                // 从DB加载规则
                PackageBuilder backageBuilder = this.getPackBuilderFromDrlDB(drlRuleDomains);
                ruleBase.addPackages(backageBuilder.getPackages());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public <T> T executeRuleEngine(List<String> drlRuleDomains, T t) {
        if (CollectionUtils.isEmpty(drlRuleDomains)) {
            return t;
        }
        this.initEngine(drlRuleDomains);
        if (null == ruleBase.getPackages() || 0 == ruleBase.getPackages().length) {
            return null;
        }
        StatefulSession statefulSession = ruleBase.newStatefulSession();
        statefulSession.insert(t);
        // fire
        statefulSession.fireAllRules(new AgendaFilter() {
            @Override
            public boolean accept(org.drools.spi.Activation activation) {
                return !activation.getRule().getName().contains("_test");
            }
        });
        statefulSession.dispose();
        return t;
    }

    /**
     * 从Drl规则DB中读取规则
     *
     * @return
     * @throws Exception
     */
    private PackageBuilder getPackBuilderFromDrlDB(List<String> drlRuleDomains) {
        // 装载规则
        List<Reader> readers = this.buildReadersFromDrlDB(drlRuleDomains);

        // 装载PackageBuilder
        try {
            return this.buildPackageBuilder(readers);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 装载PackageBuilder
     *
     * @param readers
     * @return
     * @throws Exception
     */
    private PackageBuilder buildPackageBuilder(List<Reader> readers)
            throws Exception {
        if (null == readers || 0 == readers.size()) {
            return null;
        }
        PackageBuilder backageBuilder = new PackageBuilder();
        for (Reader r : readers) {
            backageBuilder.addPackageFromDrl(r);
        }
        // 检查脚本是否有问题
        if (backageBuilder.hasErrors()) {
            throw new Exception(backageBuilder.getErrors().toString());
        }
        return backageBuilder;
    }

    /**
     * 装载db中的规则到List<Reader>
     *
     * @return
     */
    private List<Reader> buildReadersFromDrlDB(List<String> drlRuleDomains) {
        List<Reader> readers = new ArrayList<Reader>();
        if (null == drlRuleDomains) {
            return readers;
        }
        for (String ruleContext : drlRuleDomains) {
            Reader br = new StringReader(ruleContext);
            readers.add(br);
        }
        return readers;
    }
}










package com.sprucetec.tms.fee.utils;

import com.alibaba.dubbo.common.utils.CollectionUtils;
import com.alibaba.dubbo.common.utils.StringUtils;
import com.google.common.collect.Lists;
import com.sprucetec.tms.fee.entity.rule.TemFeeCalculateRule;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;

import java.util.List;

/**
 * Created by meicai on 2016/12/12.
 * RuleBaseFacatory  规则基础工厂 .
 */
public class RuleBaseFacatory {
    private static RuleBase ruleBase;

    /**
     * 单实例RuleBase生成工具.
     *
     * @return
     */
    public static RuleBase getRuleBase() {
        return null != ruleBase ? ruleBase : RuleBaseFactory.newRuleBase();
    }

    /**
     * 构建规则对象.
     *
     * @param temFeeCalculateRules 规则实力对象集合.
     * @return
     */
    public static List<String> getDroolsRuleDomains(List<TemFeeCalculateRule> temFeeCalculateRules) {
        List<String> domains = Lists.newArrayList();
        if (CollectionUtils.isEmpty(temFeeCalculateRules)) {
            return domains;
        }
        String domain = "";
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(temFeeCalculateRules.get(0).getPackageName() + "\n");
        stringBuffer.append("import com.sprucetec.tms.fee.entity.rule.*;" + "\n");//对应于规则文件的实体对象所放的包
        stringBuffer.append("import java.math.*;" + "\n");
        stringBuffer.append("import java.lang.*;" + "\n");
        stringBuffer.append("import java.io.*" + "\n");
        stringBuffer.append("import java.util.*" + "\n");
        for (int i = 0; i < temFeeCalculateRules.size(); i++) {
            stringBuffer.append("rule " + temFeeCalculateRules.get(i).getRuleName() + "_" + i + "\n");//规则名称
            if (StringUtils.isNotEmpty(temFeeCalculateRules.get(i).getDateEffective())) {
                stringBuffer.append("date-effective '" + temFeeCalculateRules.get(i).getDateEffective() + "'\n");//启用时间
            }
            if (StringUtils.isNotEmpty(temFeeCalculateRules.get(i).getDateExpires())) {
                stringBuffer.append("date-expires '" + temFeeCalculateRules.get(i).getDateExpires() + "'\n");//过期时间
            }
            stringBuffer.append("lock-on-active " + temFeeCalculateRules.get(i).getLockOnActive() + "\n");//规则是否循环执行
            stringBuffer.append("salience " + temFeeCalculateRules.get(i).getSalience() + "\n" + "when" + "\n");//优先级
            stringBuffer.append(temFeeCalculateRules.get(i).getRuleWhen() + "\n");//条件
            stringBuffer.append("then" + "\n");
            stringBuffer.append(temFeeCalculateRules.get(i).getRuleThen() + ";\n");//返回
            stringBuffer.append("end" + "\n");
        }
        domain=stringBuffer + "";
        domains.add(domain);
        return domains;
    }
}

软件可靠性测试与评价 本文系统介绍了软件可靠性工程的核心内容,包括可靠性概念、模型分类、测试方法和评价体系。重点解析了可靠性测试的三大步骤:定义运行剖面、设计测试用例和实施测试收集数据,并以智能安防系统为例说明具体应用。可靠性评价需结合业务场景,通过量化指标(MTBF、失效率等)和模型预测持续优化系统。文章强调可靠性需贯穿软件全生命周期,通过闭环反馈实现持续改进,为关键系统提供质量保障。 阅读详情

相关推荐

USB接口ESD保护电路:深度剖析与选型建议

USB接口在热插拔和频繁使用中极易遭遇静电放电(ESD)冲击,导致芯片损坏或通信异常。本文结合实际电路设计经验,详解TVS二极管、集成ESD防护器件等方案在USB接口上的应用要点,重点分析钳位电压、结电容、IEC 61000-4-2等级等关键参数对信号完整性与防护效果的影响,助你为USB接口匹配高可靠、低干扰的ESD保护方案。

weixin_36289813的博客 510

Drools的使用

目录说明单独使用drools2种ksession的区别spring整合drools缺省 kmodule.xml 文件从数据库加载drl脚本   以 订单满减打折、用户签到得金币 为例。   说明 drools规则引擎类似于网关zuul、gateway,引入类库写成服务,不是nginx、mysql这种单独的软件。 drools可以单独使用,也可以搭配spring使用; IDEA默认安装了drools插件,支持drools。   单独使用drools 1、pom.xml 引入

chy-x 的博客 4129

游戏封包抓取实战:雷电模拟器+ProxyDroid+查尔斯3.93+WPE全流程解析

本文详细解析了使用雷电模拟器、ProxyDroid、查尔斯3.93和WPE进行游戏封包抓取的全流程实战。通过环境搭建、代理配置与工具协同,手把手教你抓取HTTP/HTTPS及原始Socket数据,涵盖从流量转向、证书安装到数据分析和常见问题排查,是学习游戏网络协议分析与安全测试的实用指南。

u8v9w0x1y的博客 446

java规则引擎Drools实战

规则引擎,全称为业务规则管理系统,英文名为BRMS(即Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理。

fegus的博客 5645

同济土木非0基础三个月跨考复旦计算机攻略

跨考cs攻略前言我cs专业课如何复习How to start from zero简历其他复试 前言 建议多去工地/化工厂涡轮增压一下 我 同济土木gpa 3.2/5 挂科 * n 辣鸡项目 * n (padding 简历) 21考复旦计算机专硕 10月-12月 学习+复习 总分392 政治 68;背肖4即可 英语二 78 裸考,(高考英语140+);做点真题,建议据自己情况准备 数学二 142 ;(高考数学接近满分);做真题+模拟题,每天写一张试卷 专业课 104 ,考试生病了,下文展开。 cs专业课

piglake的博客 7238

给IC设计新人的Tessent Scan入门指南:从RTL到ATPG的完整DFT流程解析

本文为IC设计新手提供Tessent Scan的完整DFT流程指南,从RTL代码检查到ATPG测试向量生成,详细解析扫描链配置、插入及验证的关键步骤。通过实战案例和工具命令示例,帮助工程师快速掌握Tessent工具链的应用技巧,提升芯片可测试性设计的效率和质量。

weixin_32541663的博客 451

drools的简单入门案例

规则引擎drools的入门案例

huan的学习记录 2228

使用Open3D进行RGB-D图像点云处理

在本文中,我们将使用Open3D来处理RGB-D图像,提取点云并进行一些基本的操作。总结起来,本文介绍了如何使用Open3D库处理RGB-D图像并提取点云。我们展示了如何读取RGB-D图像,创建RGB-D图像和点云,并显示点云。除了显示点云,Open3D还提供了许多其他功能,如点云滤波、点云配准、表面重建等。在创建RGB-D图像时,我们需要指定深度图像的缩放因子和截断值,以及是否将RGB图像转换为强度图像。希望本文能够帮助您入门Open3D,并在处理RGB-D图像和点云数据时提供一些指导。

QfcaLinux的博客 446

Drools 入门 实例(一)

Drools 入门 实例Drools 是一个开源的规则引擎,用于规则的定义和执行。它具有以下特点:灵活性:Drools 提供了丰富的规则定义语言,允许用户以自然语言的方式来表达业务规则。用户可以通过规则文件来定义和管理规则,也可以通过编程接口在运行时动态添加、修改和删除规则。高性能:Drools 使用了基于 Rete 网络的算法来实现规则匹配和推理,这种算法可以有效地处理大规模的规则集合。此外,Drools 还支持多线程和分布式执行,可以进一步提高系统的性能。

专注Java(全栈)应用开发,求知若渴,虚心若愚,talk is cheap, show me the code. 1700

Qlib:微软开源的AI量化投资平台 极简入门快速上手教程:使用 Qlib 进行中芯国际股价回测和预测

Qlib是由微软开源的面向AI量化投资的工具包。它提供了构建量化投资模型所需的基础设施,旨在帮助研究者和从业人员更高效地进行量化研究和策略开发。

AI天才研究院 5418

【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序

这是我们学习的第四款智能体框架了。前面我们学习了 AutoGPT、MetaGPT、LangGraph 等智能体应用开发框架,各有优缺点。今天我们开始学习AgentScope这一款多智能体开发框架。卷起来吧,多看看,多用用,没坏处。

同学小张的博客 5428

规则引擎Drools使用,0基础入门规则引擎Drools(一)基础入门

规则编号名称描述1检查学历与薪水1如果申请人既没房也没车,同时学历为大专以下,并且月薪少于5000,那么不通过2检查学历与薪水2如果申请人既没房也没车,同时学历为大专或本科,并且月薪少于3000,那么不通过3检查学历与薪水3如果申请人既没房也没车,同时学历为本科以上,并且月薪少于2000,同时之前没有信用卡的,那么不通过4检查申请人已有的信用卡数量如果申请人现有的信用卡数量大于10,那么不通过规则编号名称描述1规则1。

秃了也弱了 4253

代谢组数据分析(二十):通过WGCNA识别核心代谢物

本教程详细介绍了一种系统性的分析流程,旨在从复杂的代谢物数据中识别出关键的代谢物。这一流程首先通过精心设计的代谢物选择步骤,从大量候选代谢物中筛选出具有潜在生物学意义的子集。随后,利用WGCNA方法,对这些筛选后的代谢物进行深入分析,以构建它们的共表达网络,最终筛选出与研究目的相关的核心代谢物(hub metabolites)。

专注生信领域 3776

[Drools]JAVA规则引擎 -- Drools

Drools是一个基于java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。 1、Drools语法开始语法之前首先要了解一下drools的基本工作过程,通常而言我们使用一个接口来做事情,首先要穿进去参数,其次要获取到接口的实现执行完毕后的结果,而drools也是一样的,我们需要传递进去数据,用于规则的检查,调用外部接口,同时还可能需要获取到规则执行完毕后得到的结果。在drools中,这个传递数据进去的对

quzishen的专栏 21万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【Drools】Drools使用入门(一)Drools上手教程(包括动态加载规则文件)

Drools简介 Drools是一款基于Java的开源规则引擎,将规则与业务代码解耦。规则以脚本的形式存储在一个文件中,使规则的变化不需要修改代码,重新启动机器即可在线上环境中生效。 规则引擎实现了业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入、解释业务规则,以及基于业务规则做出业务决策,从而提供极大的编程便利。 对系统使用人员来说: 将业务规则的创建、修改、...

唐Ian的博客 4万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

规则引擎 Drools

规则引擎 Drools 文章目录规则引擎 Drools1. 问题引出2. 规则引擎概述2.1 什么是规则引擎2.2 使用规则引擎的优势2.3 规则引擎应用场景2.4 Drools介绍3.Drools入门案例3.1 业务场景说明3.2 开发实现3.3 小结3.3.1 规则引擎构成3.3.2 相关概念说明3.3.3 规则引擎执行过程3.3.4 KIE介绍4. Drools基础语法4.1 规则文件构成4.2 规则体语法结构4.3 注释4.4 Pattern模式匹配4.5 比较操作符4.5.1 语法4.5.2 操

Backend Engineer API Integration | System Design | Architecture Growth 5845

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Drools 简介

序 现实生活中,规则无处不在。对于某些企业级应用,诸如欺诈检测软件,购物车,活动监视器,信用和保密应用之类的系统,经常会有大量的、错综复杂的业务规则配置,而且随着企业管理者的决策变化,这些业务规则也会随之发生更改。我们开发人员不得不一直处理软件中的各种复杂问题,不仅需要将所有数据进行关联,还要尽可能快地一次性处理更多的数据,甚至还需要以快速的方式更新相关机制。 规则是什么? ​我们的日常生活是由规...

qinheJ的博客 3万+

Drools使用细节

Drools使用细节一、根据数据库存储的内容录入规则二、语法细节 一、根据数据库存储的内容录入规则 先注入kieSystem @Autowired private KieFileSystem kieFileSystem; // 获取kie服务 KieServices kieServices = KieServices.Factory.get(); // 获取规则 List<Rule> listRule = ruleDao.getRule(); // 获取规则依赖,就是import、globa

qq_39203889的博客 1757

Drools

drools是一款由JBoss组织提供的基于Java语言开发的开源规则引擎,可以将复杂且多变的业务规则从硬编码中解放出来,以规则脚本的形式存放在文件或特定的存储介质中(例如存放在数据库中),使得业务规则的变更不需要修改项目代码、不用重启服务器就可以在线上环境立即生效。drools官网地址:https://drools.org/drools源码下载地址:https://github.com/kiegroup/drools使用规则引擎能够解决什么问题?

MonsterK666的博客 1305

drools dmn_使用Drools的DMN运行时示例

drools dmn 正如去年宣布的那样 ,Drools 7.0将在合规级别3对DMN模型提供全面的运行时支持。 在撰写本文时,运行时实现已完成,并且该团队现在正在努力进行改进,以进行错误修复和用户友好。 不幸的是,对于7.0版本,我们将无法及时提供完整的创作功能,但是我们正在为将来的工作而努力。 但是,关于标准的伟大之处在于,没有供应商锁定。 任何支持该标准的工具均可用于生成可使用D...

最佳 Java 编程 1947

规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法

通过控制台可以看到,只有获取焦点的分组中的规则才会触发。与activation-group不同的是,activation-group定义的分组中只能够有一个规则可以被触发,而agenda-group分组中的多个规则都可以被触发。1、如果对象类型为包装类型时,在一个规则中改变了global的值,那么只针对当前规则有效,对其他规则中的global不会有影响。两者的区别:当向Working Memory中加入多个满足条件的Fact对象时,使用了exists的规则执行一次,不使用exists的规则会执行多次。

秃了也弱了 2244

drools in java_[Drools]JAVA规则引擎 -- Drools

Drools是一个基于Java的规则引擎,开源的,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启机器就可以立即在线上环境生效。1、Drools语法开始语法之前首先要了解一下drools的基本工作过程,通常而言我们使用一个接口来做事情,首先要穿进去参数,其次要获取到接口的实现执行完毕后的结果,而drools也是一样的,我们需要传递进去数据,用于...

weixin_29491655的博客 306

规则引擎Drools使用,0基础入门规则引擎Drools(三)整合springboot

规则引擎Drools使用,0基础入门规则引擎Drools(一)基础入门 规则引擎Drools使用,0基础入门规则引擎Drools(二)高级语法 规则引擎Drools使用,0基础入门规则引擎Drools(三)整合springboot 规则引擎Drools使用,0基础入门规则引擎Drools(四)WorkBench控制台 规则引擎Drools使用,0基础入门规则引擎Drools(五)实战+决策表在项目中使用Drools时往往会跟Spring整合来使用。具体整合步骤如下:第一步:创建maven工程drools_s

秃了也弱了 1780

Drools 规则引擎的使用总结

前一段时间在开发了一个做文本分析的项目。在项目技术选型的过程中,尝试使用了Drools规则引擎。让它来作为项目中有关模式分析和关键词匹配的任务。但后来,因为某种原因,还是撇开了Drools。现将这个过程中使用Drools的一些经验和心得记录下来。  (一)什么时候应该使用规则引擎     这实际是一个技术选型的问题。但这个问题又似乎是一个很关键的问题(一旦返工的话,你就知道这个问题是多么重要了

Ryan Z 的技术日志 1万+

drools。drools_使用Drools跟踪输出

drools。drools Drools 6包含一个跟踪输出,可以帮助您了解系统中正在发生的事情,事物执行的频率以及多少数据。 这也有助于理解Drools 6现在是基于目标的算法,它使用链接机制链接评估规则。 有关此的更多详细信息: http://www.javacodegeeks.com/2013/11/rip-rete-time-to-get-phreaky.html 首先要做...

最佳 Java 编程 383

Drools那些事儿

Drools那些事儿 1.简单介绍 Drools是一个基于java的规则引擎,可以将复杂多变的规则从硬编码中解放出来,以规则脚本的形式存放在文件中,使得规则的变更不需要修正代码重启服务就可以在线上环境生效。 2.语法规则 一个规则通常包括三个部分:属性部分(attribute)、条件部分(LHS)和结果部分(RHS),对于一个完整的规则来说,这三个部分都是可选的,以下规则是合法的 rule "name" when then end when-t

Complex_Boy的博客 456
上一篇: 读配置文件 properties
下一篇: [Drools]JAVA规则引擎 -- Drools 2
杜引强
博客等级 码龄13年 806粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值