2017-04-15 22 views
2

我正在使用Spring和Hibernate开发Java REST Web服务。我需要实现一项功能来安排未来的任务。例如,当用户在我的应用程序中注册时,我必须在他的账户中为他的前六个月记入100个虚拟积分。像这样,还有一些更类似的功能。如何在Spring Web Service中实现计划任务?

我想像TimerTask可以用于此功能。问题是,如果我为每个注册的用户创建了Timer,我无法停止特定用户的Timer,如果他变为不活动状态并且看起来像在内存中转储线程。如果有1000个用户注册,将会有1000 TimerTask线程。

如何使用Spring或Java实现这种功能?我应该完全控制线程,我可以停止线程如果我想。

+0

,你一定程序运行这么久,而无需重新启动或发生故障强制重启?我认为你需要一个解决方案来存储这些数据,并定期检查定时条件。 –

+0

是的。我正在使用Tomcat服务器。它会在某个时候崩溃,然后停下来,然后我需要重新启动服务器才能恢复。 – Mdumanoj

+0

请参阅https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html – rvit34

回答

0

您可以使用单线程执行带有@scheduled注释和最小XML配置的任务,我将离开您的链接reference

你只是需要创建在您的服务的方法,并把@Scheduled注释像

@Scheduled(cron = "0 15 10 15 * ?") 
public void scheduleTaskUsingCronExpression(){ 
long now = System.currentTimeMillis()/1000; 
System.out.println("schedule tasks using cron jobs - " + now); 
} 
+0

是的,通过使用此功能,我可以安排工作。但是我怎么能阻止这份工作。如果我安排Job每10分钟执行一次,并由于某些原因我想停止执行,那我该怎么做? – Mdumanoj

+0

不要试图阻止工作!而是在计划任务内部进行布尔检查!你可以改变布尔变量来停止和启动服务...请注意,并接受我的答案,如果它的工作! –

+0

我不认为这是正确的做法。因为实际上'TimerTask'正在运行,它将永远运行。 – Mdumanoj