Scheduled Annotation in Spring(为每个值在特定时间后调用)



我目前正在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对象元素可能不是一个很好的例子,但您可以使用自己的模型或Map接口来执行您想要执行的操作。

首先,您可以简单地将元素添加到Map接口,并通过为每个元素保留一个expired time在至少10分钟内删除它们。链接中的示例可以作为地图界面的参考。如何从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

最新更新