在Spring / Java的计划任务(Scheduling Task in Spring/Java

2019-07-22 01:15发布

我产生线程将继续从数据库中提取的记录块,并把它们放入队列中。 该线程将服务器负载启动。 我想这个线程是积极的所有时间。 如果在数据库中没有记录,我希望它等待一段时间后再次检查。 我想用弹簧任务计划程序安排这一点,但不知道这是正确的,因为我只希望我的任务启动一次的。 什么将在春季实现这个的好办法吗?

另外,我需要有一个边界检查,如果我的线程下降(因为任何错误或异常情况),应当在一段时间后重新实例化。

我可以通过使用线程的通信方式,但只是想,如果有可用的东西在春季或Java这样的情况下做到这一切在java中。

任何建议或指针会有所帮助。

Answer 1:

您可以使用@Scheduled注释运行作业。 首先,创建一个类被注释与方法@Scheduled

public class GitHubJob {

   @Scheduled(fixedDelay = 604800000)
   public void perform() {
      //do Something
    }
}

然后在配置文件中注册这个类。

弹簧的context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.1.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<tx:annotation-driven/>
<task:annotation-driven scheduler="myScheduler"/>

<task:scheduler id="myScheduler" pool-size="10"/>
<bean id="gitHubJob" class="org.tothought.spring.jobs.GitHubJob"/>

</beans>

欲了解更多有关计划访问春天文档 。



Answer 2:

@Scheduled(fixedDelay=3600000)
private void refreshValues() {
   [...]
}

运行每隔一小时一次任务。 它必须是无效,不接受任何参数。 如果你使用Spring的Java配置,你还需要添加注释@EnableScheduling到您的一个@Configuration类。



Answer 3:

您可以尝试使用Quartz调度。 http://quartz-scheduler.org/这将允许您指定的任务执行之间的持续时间。 您可以设置表示该类是否运行之前,为了避免重复代码,你只需要运行“第一”时间标记(布尔)。



Answer 4:

Spring对计划任务进行-OT-的开箱即用支持。 下面是该文档春天的最新3.2.x中版本,但检查你正在使用的版本的文档。 看起来它采用石英引擎盖调度任务下。



Answer 5:

我觉得你的要求是只需定期塞纳里奥其中石英或弹簧调度框架支持非常好。 但你想创建一个spececial方法IMPL它。 我的建议是保持它的简单和愚蠢。 春天scheudling将充分利用你的工作线程通过,而不是集中乳宁它所有的时间。

由于统计的,它很容易检查工人阶级的日志。 如果你想看到的Web控制台的统计数据,你需要记录工人的日志数据库。 我相信你可以在正常的方式使之容易。



文章来源: Scheduling Task in Spring/Java