SpringBoot定时任务初探

2022-06-09 16:57:38 浏览数 (2)

核心

简单两步

代码语言:javascript复制
@EnableScheduling  // 在springboot入口程序中添加,开启定时任务服务
@Scheduled(cron = "0/8 * * * * ? ")  // 定时任务上添加,设置定时任务计划

这样springboot就会接管定时任务自动按计划执行,不需要手动写调用方式

注意点

  • 定时job默认是单线程的,所以多个定时scheduler的时候,互相会产生干扰导致执行时机不可控
  • 可以使用@Async来开启异步, 就可以多线程执行定时scheduler了, 每个任务启动的执行线程都不一样
  • 如下是测试源代码以及验证线程问题

源代码

代码语言:javascript复制
package com.starry.service;

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@Service
public class MyTaskScheduleService {

    @Scheduled(cron = "0/5 * * * * ? ")
    public void PrintfHelloJob() {
        System.out.println("同步Hello,当前时间"   LocalDate.now()   "线程名"   Thread.currentThread().getName()   ",hello!!");
    }

    @Scheduled(cron = "0/8 * * * * ? ")
    public void PrintfTestJob() {
        System.out.println("同步test,当前时间"   LocalDate.now()   "线程名"   Thread.currentThread().getName()   ",Test!!");
    }

    /**
     * 多线程执行定时任务,否则下一次执行会被上次执行情况干扰
     */
    @Async
    @Scheduled(cron = "0/10 * * * * ? ")
    public void AsyncPrintfHelloJob() {
        System.out.println("异步JOB,当前时间"   LocalDate.now()   "线程名"   Thread.currentThread().getName()   ",hello!!");
    }
}

版权属于:dingzhenhua

本文链接:https://cloud.tencent.com/developer/article/2019326

转载时须注明出处及本声明

0 人点赞