我有一个用 Spring 制作的仪表板,它必须控制一些任务执行。基本思想是有一个线程定期将此任务发送到远程跟踪器。我怎样才能实例化这个线程?我一直在阅读一些内容,有些人说使用线程不是一个好主意。这会导致 Spring 生命周期出现问题吗?还有另一种方法可以定期调用方法吗?
6 回答
Spring 支持任务调度。在此处查找更多信息:
例如,您可以在应用程序上下文中配置计划任务,如下所示:
<task:scheduled-tasks scheduler="myScheduler">
<task:scheduled ref="beanA" method="methodA" fixed-delay="5000"/>
</task:scheduled-tasks>
<task:scheduler id="myScheduler" pool-size="10"/>
使用 Spring 时,您可以尝试 Spring 自己的 Task Scheduling。一个很好的教程可以在这里找到。
我已经用过这个了,而且效果很好。
如果您需要一个与 spring 完美配合的强大任务调度程序,请使用石英调度程序。您可以配置用于调度程序的线程数等等。这里没有线程控制令人头疼的问题,quartz scheduler 管理得很好。
它可以在春季进行配置,以处理非常复杂的时间表,例如
每月 1 日凌晨 12 点至凌晨 4 点,每分钟触发一次。
http://quartz-scheduler.org/了解更多信息。
您可以使用@Scheduled 注释或者您可以创建自己的线程并使其休眠并定期再次调用。
将 spring 与石英集成,让您轻松满足所有计划任务要求。这是一个可以帮助您的教程:
http://www.mkyong.com/spring/spring-quartz-scheduler-example/
就我而言,我想每个月运行一次代码
假设我想执行课堂remove
上的功能EmptyScopesRemoverImpl
所以在spring xml中添加这个
<task:scheduled-tasks>
<task:scheduled ref="EmptyScopesRemover" method="remove" cron="0 0 0 1 * *"/>
</task:scheduled-tasks>
有关cron
值及其所需内容的更多信息,请查看https://stackoverflow.com/a/32521238/4251431
目前,该值意味着在the midnight on the first day of every month
.
请注意,这EmptyScopesRemover
只是一个 bean 指的是该类