我有一个场景,我想将规则纯粹用作调用其他服务的计划作业。我正在使用类似于答案 2 的解决方案。所以我有规则 1,它看起来像:
rule "ServiceCheck"
timer ( int: 3m 5m )
no-loop true
when
then
boolean isServiceEnabled = DummyServices.getServiceEnabledProperty();
if(isServiceEnabled){
ServicesCheck servicesCheck = new ServicesCheck();
servicesCheck.setServiceEnabled(true);
insert(servicesCheck);
}
end
如果启用了服务,这将每 5 分钟插入一个 servicesCheck 对象。一旦插入此对象,我的其他规则就会触发并从那里收回 servicesCheck 事实。
我面临的问题是当我关闭应用程序并在第二天启动它时。那时,ServiceCheck 规则在停止之前被触发了很多次。我的假设是上次触发的时间保存在会话中,当我重新启动时,它会发现当前时间和保存的时间之间的差异,并在会话中匹配 2 次之前多次触发规则。如此有效地,为了赶上从关闭到重新启动的 1 小时间隙,在这种情况下它将触发规则 12 次,因为间隔设置为 5 分钟。有没有一种方法可以更新规则会话上的最后触发时间,以便它像一个新的开始一样开始工作,而不会赶上丢失的时间。