Spring Batch Scheduler:计时器实现

时间:2018-11-27 08:50:53

标签: java spring

我必须构建一个在线考试模块,该模块将提供10分钟的完成时间。为实现计时器部分,我当时想与Spring Batch Scheduler一起使用。请参阅以下配置文件:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task" xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.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-4.3.xsd">

<context:component-scan base-package="mypackage" />

<bean id="timerService" class="mypackage.TimerService" />


<task:scheduler id="timerScheduler" pool-size="10" />

  <task:scheduled-tasks scheduler="timerScheduler">
     <task:scheduled ref="timerService" method="displayTimer"
         fixed-rate="1000" />
  </task:scheduled-tasks>
</beans>

在调用过程中,我从一个主要方法调用:

ClassPathXmlApplicationContext context = new 
ClassPathXmlApplicationContext("spring/applicationContext.xml");

一切都很好,除了,一旦容器被加载,计时器就会被触发。但是我的目标是一旦用户开始检查就启动调度程序(例如:在方法调用/按钮单击之后),不在应用程序启动时。

任何人都可以在配置中提供任何线索来实现这种情况。 我知道trigger属性,但是它通常与cron表达式一起使用,在我的情况下,触发器将不是基于时间而是基于事件。 所以,我无法通过cron。

有人可以为此提供任何合适的解决方案吗? 我将自己实现,只是如何基于特定的方法调用rest调用调度程序。

1 个答案:

答案 0 :(得分:1)

没有Spring batch scheduler这样的东西,您指的是Spring Framework的任务调度。

调度与您的“例如:方法调用/按钮单击后”的要求不兼容。计划意味着要事先知道计划,但是在您的情况下,您并不知道用户何时单击按钮。您真正需要的是start a count down timer根据用户的操作。