繁体   English   中英

Spring 中的计划注释(每个值在一定时间后调用)

[英]Scheduled Annotation in Spring (call after a certain time for each value)

我目前正在 Spring 中使用@Scheduled Annotation。 我想要做的是,在 10 分钟后从列表中删除一个值,因此该值只能在创建后至少 10 分钟。 有没有办法用@Scheduled Annotation 来实现这个?

例子:

public int values(){
 for(int i = 0; i < 10;++i){
 Random ran = new Random();
 int x = ran.nextInt(6) + 5;
 list.add(x);
 }
}
@Scheduled(fixedRate = 600000)
public void removeValue(){
 list.remove(list.size()-1);
}

在此示例中,该值在 10 分钟后被删除。 然后我必须等待 10 分钟才能删除下一个值,但如果最后一个值是在删除值之后直接创建的呢? 总之,我想在列表中的值 10 分钟后调用 removeValue() 。

使用简单的List object 元素可能不是一个很好的示例,但是您可以使用自己的 model 或Map接口来做您想做的事情。

首先,您可以简单地将元素添加到Map接口,并通过为每个元素保留expired time在至少 10 分钟内删除它们。 链接中的示例可以作为 map 接口的参考。 如何从 HashMap 中删除过期元素并同时添加更多元素 – Java Timer、TimerTask 和 futures() – 完整示例

如果你有一个数据库实体; 您可以调用这些过期元素并将它们从数据库中删除。 例如,我有一个这样的代码块。

综上所述,我选取了创建日期超过 10 分钟的元素。 剩下的就是删除它。

Date retentionDate = org.apache.commons.lang3.time.DateUtils.addMinutes(new Date(), -10);
List<?> items = service.findAllByCreationDateBefore(retentionDate);

请记住根据您希望 Elaman 停留超过 10 分钟的时间相应地设置fixedRate值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM