前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot定时任务初探

SpringBoot定时任务初探

作者头像
西柚dzh
发布2022-06-09 16:57:38
1850
发布2022-06-09 16:57:38
举报
文章被收录于专栏:dcmickey小站dcmickey小站

核心

简单两步

代码语言: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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心
  • 注意点
  • 源代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档