当阅读到自己之前写的代码,发现自己之前一直对Cron表达式的理解有误,很是震惊。
在Spring配置文件中加入如下配置:
<!-- TASK --> <task:annotation-driven executor="myExecutor" scheduler="myScheduler"/> <task:executor id="myExecutor" pool-size="5"/> <task:scheduler id="myScheduler" pool-size="10"/>
编写如下测试代码:
package com.ylmob.yunpay.task.statistics.impl; import java.text.SimpleDateFormat; import java.util.Date; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component public class TestTask { private static final Logger logger = LoggerFactory.getLogger(TestTask.class); @Scheduled(cron="* 0/2 * * * ?") public void task(){ logger.info("The current time is {}.", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date())); } }
我以为
@Scheduled(cron="* 0/2 * * * ?")
表示从第0分钟开始,然后每两分钟执行一次,但是通过查看控制台的日志(截图如下),发现并不是执行一次,而是从第0分钟开始,每两分钟的那一分钟内的每一秒都会执行一次。
原文:http://my.oschina.net/dengjianming/blog/516545