SpringBoot的定时任务

SpringBoot提供了非常简单的定时任务配置方法,不再像之前需要配置很多Quartz的文件了。
首先看一个简单的静态任务:

@Configuration
@EnableScheduling
@Slf4j
public class StaticScheduledTasks {

  @Autowired
  private JCacheCacheManager jCacheCacheManager;

  @Value("${info.ehcache.smsTimeCount}")
  private String smsTimeCount;

  /**
   * 每天0点清除同一手机发送短信计数
   */
  @Scheduled(cron = "0 0 0 */1 * ?")
  private void configureTasks() {
    jCacheCacheManager.getCache(smsTimeCount).clear();
    log.info("Ehcache: " + smsTimeCount + " cleared");
  }
}

类上添加@EnableScheduling注解, 来启用定时任务能力, 然后用@Scheduled(cron=cron表达式)来定期执行一个任务就可以了, 非常方便。

要动态添加一个任务, 可以用Java提供的ScheduledExecutorService:

public static ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(50);
scheduler.scheduleAtFixedRate(() -> {
        log.debug("start heartbeatTask --> " + ctx.channel().remoteAddress());
        ctx.channel().writeAndFlush(new PingWebSocketFrame());
      }, 5, 15, TimeUnit.SECONDS);

也可以用Spring封装的TaskScheduler:

  @Autowired
  private TaskScheduler taskScheduler;

  public void test(){
    ScheduledFuture future = taskScheduler.scheduleAtFixedRate(()->{
      System.out.println(LocalDateTime.now());
    }, Instant.now(), Duration.ofSeconds(5));
    try {
      Thread.sleep(20000);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    future.cancel(true);
    return;
  }

TaskScheduler提供了更加丰富的能力, 比如可以使用CronTrigger来规划任务,等等。Spring的官方文档提供了很详细的使用及配置说明, 就不赘述了。

你可能感兴趣的:(SpringBoot的定时任务)