首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为drools中的子类设置不同的event @expires

在Drools规则引擎中,@expires注解用于指定一个事实(Fact)在内存中保持有效的时间。如果你想要为子类设置不同的过期时间,可以通过以下几种方式来实现:

基础概念

  • Drools: 一个基于Java的开源业务规则管理系统(BRMS),它允许业务分析师和开发人员以声明式的方式编写业务规则。
  • Fact: 在Drools中,事实是规则处理的对象,可以是Java对象。
  • @expires: 这是一个注解,用于标记一个事实的过期时间。

相关优势

  • 灵活性: 可以为不同的业务实体设置不同的过期策略,从而更加精确地控制内存使用和规则触发时机。
  • 可维护性: 通过注解直接在实体类上定义过期时间,使得业务逻辑更加清晰,便于维护。

类型与应用场景

  • 时间基的过期: 根据固定的时间间隔来使事实过期。
  • 事件基的过期: 当特定事件发生时,使事实过期。

应用场景包括但不限于:

  • 会话管理: 在用户会话中,不同类型的会话可能有不同的超时要求。
  • 订单处理: 不同类型的订单可能需要不同的处理时限。

示例代码

假设我们有两个子类OrderAOrderB,它们都继承自Order类,并且我们希望为它们设置不同的过期时间。

代码语言:txt
复制
import org.kie.api.definition.type.Expires;
import java.util.concurrent.TimeUnit;

// 父类
public class Order {
    private String orderId;
    // ... 其他属性和方法
}

// 子类 OrderA
@Expires("10m") // 设置过期时间为10分钟
public class OrderA extends Order {
    // ... 特定于OrderA的属性和方法
}

// 子类 OrderB
@Expires("30m") // 设置过期时间为30分钟
public class OrderB extends Order {
    // ... 特定于OrderB的属性和方法
}

在Drools规则文件中,你可以这样使用:

代码语言:txt
复制
package com.example

import com.example.Order;
import com.example.OrderA;
import com.example.OrderB;

rule "Process OrderA"
when
    $order : OrderA()
then
    // 处理OrderA的逻辑
end

rule "Process OrderB"
when
    $order : OrderB()
then
    // 处理OrderB的逻辑
end

遇到问题及解决方法

如果你遇到了@expires注解不生效的问题,可能的原因包括:

  1. 版本兼容性问题: 确保你使用的Drools版本支持@expires注解。
  2. 配置错误: 检查是否有其他配置覆盖了@expires的设置。
  3. 类加载问题: 确保相关的类已经被正确加载到Drools的运行时环境中。

解决方法:

  • 更新Drools到最新版本。
  • 检查kmodule.xml或其他相关配置文件,确保没有冲突的设置。
  • 使用调试工具检查类加载情况,确保OrderAOrderB类被正确识别和使用。

通过以上步骤,你应该能够为Drools中的子类设置不同的过期时间,并解决可能遇到的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android中TextView文字设置不同的颜色

在项目的过程中会遇到在一行文字中,部分功能需要不同的文字颜色来展示,下面介绍两种方式实现: 效果图: [wqs2rn595h.png] 这里写图片描述 方式一: 用SpannableStringBuilder...blackSpan,12, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.setText(builder); 其中,”只会玩战士回复冷云他大叔:有钱任性” 为你要改变的文本...setSpan方法有四个参数,ForegroundColorSpan是为文本设置前景色,也就是文字颜色。如果要为文字添加背景颜色,可替换为BackgroundColorSpan。...0为文本颜色改变的起始位置,5为文本颜色改变的结束位置。最后一个参数为布尔型,可以传入以下四种。...>冷云他大叔:啊哈哈哈或"; tv.setTextSize(15); tv.setText(Html.fromHtml(str)); ---- 小编整理了一份Android电子书籍,需要的童鞋关注公众号回复

9.8K20
  • X#中如何根据不同的区域设置显示项目资源中不同语言的文件

    这里所说的区域设置,应该是 OS 的区域设置,换句话说,是中文环境还是其他语言的环境。...上一篇解释了如何将窗体控件的 Text (按照 VFP 习惯的说法,就是控件的 Caption)实现多语言的方法,今天来看一下控件根据不同的区域设置显示不同语言文件内容的方法。...打开 VS IDE,创建基于模板的项目,如下图所示: 我将项目命名为 Demo 更改项目属性,将所使用的方言更改为 Visual FoxPro,并更改“语言”和“方言”中的选项以“适配”所选方言。...双击打开 form1.prg,进入窗体设计模式,从工具箱中拉一个 RichTextBox 控件到表单,并命名为 rtfWarning 。 在项目中添加“现有项”--事先准备好的RTF文件。...然后在项目属性的资源中,也添加这两个文件。

    6210

    PQ-M及函数:实现Excel中的lookup分段取值(如读取不同级别的提成比例)

    小勤:我现在有个按营业额不同等级的提成比例表,怎么用Power Query读到营业额数据表里?如下图所示: 大海:这个问题如果是在Excel里的话,用Lookup函数非常简单。...,类似于在Excel中做如下操作(比如针对营业额为2000的行,到提成比例表里取数据): 那么,Table.SelectRows的结果如下图所示: 2、在Table.SelectRows得到相应的结果后...大海:这其实是Table.SelectRows进行筛选表操作时的条件,这相当于将一个自定义函数用于做条件判断,其中的(t)表示将提成比例表作为参数,而t[营业额]表示提成比例表里的营业额列,而最后面的[...营业额]指的是数据源表里的营业额,这里面注意不要搞乱了。...大海:PQ里的函数式写法跟Excel里的公式不太一样,慢慢适应就好了。

    1.9K20

    【Drools二】打工人学习Drools基础语法

    drl是Drools Rule Language的缩写。在规则文件中编写具体的规则内容。...2.2 Pattern模式匹配 Drools中的匹配器可以将Rule Base中的所有规则与Working Memory中的Fact对象进行模式匹配,那么我们就需要在规则体的LHS部分定义规则并进行模式匹配...用户可以通过设置agenda-group来控制规则的执行,只有获取焦点的组中的规则才会被触发。...与activation-group不同的是,activation-group定义的分组中只能够有一个规则可以被触发,而agenda-group分组中的多个规则都可以被触发。...4.10 date-expires属性 date-expires属性用于指定规则的失效时间,即只有当前系统时间小于设置的时间或者日期规则才有可能触发。默认日期格式为:dd-MMM-yyyy。

    2.1K20

    jbpm5.1介绍(3)

    这可能是一个基本数据类型,如布尔,INT,或String,或任何Object的子类。变量可以定义一个变量的范围内。顶层的范围是过程本身的变量的范围。 Subscopes可以定义使用一个子进程。...动作角本 动作脚本可以使用不同的方式: 在脚本任务中 进入或者退出动作中 操作全局和过程和预定义变量kcontext的定义的变量的访问。...此变量的类型org.drools.runtime.process.ProcessContext,可用于多个任务: 获取当前节点的实例(如适用)。节点的实例,如它的名称和类型的数据,可以查询。...这可能是一个开始事件(即用来指示的过程中开始),结束事件(定义过程结束,或该子流)和中间事件(指示的执行过程中可能出现的事件过程)。 活动:这些定义,需要在执行过程中执行不同的动作。...存在不同类型的任务,对活动的类型取决于您尝试模型(如人工的任务,服务任务等)和actvities也可以嵌套(使用不同类型的子进程)。 网关:可以被用来定义多个路径的过程中。

    1.4K40

    美团酒旅实时数据规则引擎应用实践

    时间窗因子可用于统计时间窗口内浏览行为发生的次数、查询首次下单时间等,表1中列举了在运营实时触达活动中需要支持的时间窗因子类型: 类型 示例 因子构成 count 近X分钟浏览POI大于Y次 count...(timeWindow(event.id, event.userId, X * 60)) distinct count 近X分钟浏览不同POI大于Y次 count(distinct(timeWindow...last 近X天最后一次搜索的酒店 last(timeWindow(event.id, event.userId, X * 60)) 表1 时间窗因子类型 根据时间窗因子类型可以看出,时间窗因子有以下特点...在实际运营活动中,对时间窗内用户某种行为次数的判断往往在5次以内,结合此业务场景,同时为避免Value过大影响读写响应时间,在更新时间窗数据时设置阈值,对超出阈值部分进行截断。...由于用于监控所上报的聚合数据存储于时序数据库OpenTSDB中,我们基于OpenTSDB开放的HTTP API,定制报警模块,定时调度、拉取数据,对不同事件,按事件量级、活动重要性等指标,应用环比、绝对值等不同报警规则及阈值

    2.3K90

    大数据:美团酒旅实时数据规则引擎应用实践

    Drools Drools开始于规则引擎,后引入Drools Fusion模块提供CEP的功能。 优势 功能较为完善,具有如系统监控、操作平台等功能。...时间窗因子可用于统计时间窗口内浏览行为发生的次数、查询首次下单时间等,表1中列举了在运营实时触达活动中需要支持的时间窗因子类型: 类型 示例 因子构成 count 近X分钟浏览POI大于Y次 count...(timeWindow(event.id, event.userId, X * 60)) distinct count 近X分钟浏览不同POI大于Y次 count(distinct(timeWindow...last 近X天最后一次搜索的酒店 last(timeWindow(event.id, event.userId, X * 60)) 表1 时间窗因子类型 根据时间窗因子类型可以看出,时间窗因子有以下特点...在实际运营活动中,对时间窗内用户某种行为次数的判断往往在5次以内,结合此业务场景,同时为避免Value过大影响读写响应时间,在更新时间窗数据时设置阈值,对超出阈值部分进行截断。

    2.1K41

    整理代码,将一些曾经用过的功能整合进一个spring-boot

    及把 debug:false,设置为debug:ture就可以直接在网页上看到弹出的错误提示 }); 九 drools 1 drools是一个规则引擎...在这里我就不指条歪路给你了,不要试图从百度学习drools,直接从drools的项目里面学。...我们设置了登录页面,而且登录页面任何人都可以访问,然后设置了登录失败地址,也设置了注销请求,注销请求也是任何人都可以访问的。...* @within() 匹配标注了指定注解的类及其所有子类 如 @within(org.springframework.stereotype.Service) 给Horseman加上@Service...标注,则Horseman和Elephantman 的所有方法都匹配 * target()通过类名指定,同时包含所有子类 如 target(examples.chap03.Horseman)

    1.2K30

    《Drools7.0.0.Final规则引擎教程》第4章 4.9 关键字

    关键字 从Drools 5开始引入了硬关键字和软关键字。硬关键字是保留关键字,在命名demo对象,属性,方法,函数和规则文本中使用的其他元素时,不能使用任何硬关键字。...以下是必须避免的硬关键字: (1)true (2)false (3)null 软关键词只在它们的上下文中被识别,可以在其他地方使用这些词,尽管如此,仍然建议避免它们,以避免混淆。...其中大多数关键字我们在前面的章节中已经介绍过。...软关键词列表如下: (1)lock-on-active (2)date-effective (3)date-expires (4)no-loop (5)auto-focus (6...由于Drools资料较少,教程编写不易,每篇博客都亲身实践编写demo。如果对你有帮助也欢迎赞赏! 也是对原创的最大支持!

    847100

    《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器

    下面以一个模拟的系统报警器来示例一下Timer的使用。规则timer每隔一秒执行一次,当满足触发规则返回结果至ResultEvent对象中,业务系统拿到报警信息,并打印。...global com.secbro.drools.testTimer.ResultEvent event rule "timerTest" timer (cron:0/1 * * * *...= new ResultEvent(); kieSession.setGlobal("event", event); final Server server = new...很显然,定时器每隔一秒执行一次,当满足规则触发条件时,将结果放入ResultEvent中。 PS:完整demo下载请加QQ群,进入文件目录下载(包含其他更多场景demo)。...后语 你的支持是我努力的最大动力!社区的建立离不开你的支持。此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。

    1.3K90

    复合事件处理(Complex Event Processing)介绍

    面向服务架构SOA 使用了比组件、程序(procedure)层次更高的服务做为处理单元,通过开放格式交换标准例如XML、Web Service 来交换数据,避免不同平台间的差异带来的不便,达到在异构IT...于1990年提出复合事件架构,使用模式比对、事件的相互关系、事件间的聚合关系,目的从事件云(event cloud)中找出有意义的事件,使得IT 架构可以更能弹性使用事件驱动架构,并且能使企业更能快速的开发出更复杂的逻辑架构...使用EPL(Event Processing Language)为SQL-LIKE 的语言,可以方便的对事件串流提供复杂的逻辑处理,使事件串流在内存中做模式比对处理,及查询的动作。...相关开源项目 Esper – Complex Event Processing http://esper.codehaus.org/ JBoss – Drools Fusion http://www.jboss.org.../drools/drools-fusion.html Open ESB IEP SE http://wiki.open-esb.java.net/Wiki.jsp?

    1.8K70

    《Drools7.0.0.Final规则引擎教程》第4章 4.2 activation-group& dialect& date-effective

    在执行的时候,具有相同activation-group 属性的规则中只要有一个被执行,其它的规则都不再执行。可以用类似salience之类属性来实现规则的执行优先级。...晋级用法:上面已经提到了,其实针对日期之后的时间是无效的。那么如果需要精确到时分秒改如何使用呢?可以通过设置drools的日期格式化来完成任意格式的时间设定,而不是使用默认的格式。...在调用代码之前设置日期格式化格式: System.setProperty("drools.dateformat", "yyyy-MM-dd HH:mm"); 在规则文件中就可以按照上面设定的格式来传入日期...: date-effective "2017-07-20 16:31" 4.2.10 date-expires 此属性与date-effective的作用相反,用来设置规则的过期时间。...后语 你的支持是我努力的最大动力!社区的建立离不开你的支持。此系列课程正在持续更新中,相关讨论QQ(593177274)已经建立,欢迎大家加入讨论。

    872100

    从零搭建精准运营系统

    kafka中;而事件类数据主要来源于前端上报事件(有专门的服务接收再丢到kafka),关系型数据库里面也可以提取一些事件。...kafka connector有以下优点: 提供大量开箱即用的插件,比如我们直接用debezium就能解决读取mysql和pg数据变更的问题 伸缩性强,对于不同的connector可以配置不同数量的task...,分配给不同的worker,,我们可以根据不同topic的流量大小来调节配置。...Esper Esper设计目标为CEP的轻量级解决方案,可以方便的嵌入服务中,提供CEP功能。 优势: 轻量级可嵌入开发,常用的CEP功能简单好用。 EPL语法与SQL类似,学习成本较低。...Drools Fusion Drools开始于规则引擎,后引入Drools Fusion模块提供CEP的功能。 优势: 功能较为完善,具有如系统监控、操作平台等功能。

    1.8K31

    《Drools6.4 中文文档》第1章1.3(完)

    设置系统属性“drools.compiler”,比如:-Ddrools.compiler=JANINO。 如果想了解到最新的依赖版本,可以查看发布版本的POM文件。...如果你想创建一个新的运行时,它基于包含在插件自身中的最新Drools项目JAR包,你也可以轻易的做到。...如果你想使用一个指定版本的Drools项目,你需要创建一个文件夹,将所有的Drools lib和依赖放在此文件夹。与上面操作不同,设置一个运行时名称,选择包含所有jar的文件夹。...可以在向导创建项目的最后一步设置运行时,如下图,取消选择“Use default Drools runtime”,在下拉框中选择合适的运行时。...Eclipse无法直接找到它们,除非告诉它资源库的位置,设置M2_REPO环境变量。 译者批注 翻译的同时也在操作实践,发现不同版本的Eclipse显示界面和配置项有所不同。

    1.5K40

    实时业务风控系统

    ,风险事件的分析必须毫秒级响应,有些场景下需要尽快拦截,能够给用户止损挽回损失 低误报,这需要人工风控经验,对各种场景风险阈值和评分的设置,需要长期不断的调整,所以灵活的规则引擎是很重要的 支持对历史数据的回溯...实时计算 要将任意维度的历史数据(可能半年或更久)实时统计出结果,需要将数据提前安装特殊结果准备好(由于事件的维度数量不固定的,选取统计的维度也是随意的,所以不是在关系数据库中建几个索引就能搞定的),需要利用空间换时间...redis redis中数据结构sortedset,是个有序的集合,集合中只会出现最新的唯一的值。利用sortedset的天然优势,做频数统计非常有利。...(event,"近1小时内同ip出现多个mobile,count="+count); --记录风险事件日志 }end --结束规则 drools的详细文档,请参考官方http://docs.jboss.org.../drools/release/6.4.0.Final/drools-docs/html_single/index.html 部署 系统默认采用jar打包和运行,建议集群方式部署,然后使用反向代理做负载均衡

    2.3K10

    Drools规则引擎入门指南(二)

    本篇博客主要讲解Drools常用的属性以及函数 属性 首先我们在resources\rules文件夹下创建一个Property.drl,还有一个DroolsApplicationPropertyTests...还有需要注意的是Drools默认的时间格式是dd-MMM-yyyy的,也就是说你必须使用24-十一月-2018它才能识别,我为什么能使用yyyy-MM-dd呢,请参考上篇文章中进行自动配置时的getKieServices...()方法 3. date-expires日期比较(大于) 刚好于date–effective相反 4. enabled 当一个规则的enabled属性变为false时这条规则将不再可用 rule...RuleNameEndsWithAgendaFilter("enabled")); } 函数 接着我们在resources\rules文件夹下创建一个Function.drl,还有一个DroolsApplicationFunctionTests Drools...test1规则没有判断条件,所以直接被执行,执行过程中它生成了一个对象插入到工作内存中,此对象的规则又恰好与test2规则匹配,所以紧接着test2执行,test2执行时更新了user对象,更新后的对象又匹配了

    90600

    这种场景你还写ifelse你跟孩子坐一桌去吧

    - then中处理结果,将结果信息返回,这个结果使用是我们设置的一个```global```全局引入。最后结尾end关键字。 - 也许你会觉得这不是很像你的```if else```吗。...从```KieServices```中获取```KieContainer```,用于给定KieModule的所有kiebase的容器。 3. 设置FACT对象,其实就是你的决策对象的一些条件值。...**test_drools() 执行规则** 1. 获取kmodule.xml中配置中名称为all-rules的session,默认为有状态的。 2....):B|红色B 在测试过程中可以尝试修改入参信息,以此验证不同的结果。...除了对自身规则网络结构的优化外,对一些功能扩展如模糊推理、事件推理、并行化等也有很多研究。 1.

    94350
    领券