SpringBoot定时任务简单、干脆、利索

文章背景:

在项目中有时候会遇到定时检测系统中某个值是否改变,如每隔30秒检查是否有最新数据上传、或是检测某个设备超过30秒时间未操作,将其设置为离线状态。这时需要在系统中开启定时任务。一般原生态开发定时任务是很麻烦的,而且问题多多。下面给大家介绍一个本人常用的定时任务配置方法:

@Async与@Component

首先需要在你的项目工程下建一个定时任务类 ScheduledTask
@Async:作用是将其标注为一个异步方法 :这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。
@Component:把普通pojo实例化到spring容器中,相当于配置文件中的

@Scheduled

@Scheduled 可以作为一个触发源添加到一个方法中;看下面讲解

 * 定时任务异步执行
 * @Scheduled(fixedRate = 3000) :上一次开始执行时间点之后 3 秒再执行(fixedRate 属性:定时任务开始后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)
 * @Scheduled(fixedDelay = 3000) :上一次执行完毕时间点之后 3 秒再执行(fixedDelay 属性:定时任务执行完成后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)
 * @Scheduled(initialDelay = 1000, fixedRate = 3000) :第一次延迟1秒后执行,之后按 fixedRate 的规则每 3 秒执行一次( initialDelay 属性:第一次执行定时任务的延迟时间,需配合 fixedDelay 或者 fixedRate 来使用)
 * @Scheduled(cron="0 0 2 1 * ? *") :通过 cron 表达式定义规则
 *
 */ava 

贴上运行效果图
在图中代码块写上你要的逻辑就行了宝贝

完整代码可修改直接使用


import com.pyddot.xroad.common.utils.DateUtils;
import com.pyddot.xroad.sys.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 定时任务异步执行
 * @Scheduled(fixedRate = 3000) :上一次开始执行时间点之后 3 秒再执行(fixedRate 属性:定时任务开始后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)
 * @Scheduled(fixedDelay = 3000) :上一次执行完毕时间点之后 3 秒再执行(fixedDelay 属性:定时任务执行完成后再次执行定时任务的延时(需等待上次定时任务完成),单位毫秒)
 * @Scheduled(initialDelay = 1000, fixedRate = 3000) :第一次延迟1秒后执行,之后按 fixedRate 的规则每 3 秒执行一次( initialDelay 属性:第一次执行定时任务的延迟时间,需配合 fixedDelay 或者 fixedRate 来使用)
 * @Scheduled(cron="0 0 2 1 * ? *") :通过 cron 表达式定义规则
 *
 */
@Component
@Async
public class ScheduledTask {
    private static Logger logger = LoggerFactory.getLogger(ScheduledTask.class);

    @Autowired
    private UserService userService;


    @Scheduled(initialDelay = 1 * 1000, fixedDelay = 10 * 1000)
    public void taskYouWantToDo() {
        logger.info("十秒执行一次的线程来了线程:" + Thread.currentThread().getName() + ",定时任务:" + DateUtils.format(new Date(), "mm:ss"));
    }

    @Scheduled(initialDelay = 2 * 1000, fixedDelay = 5 * 1000)
    public void taskYouWantToDo2() {
        logger.info("五秒线程:" + Thread.currentThread().getName() + ",定时任务:" + DateUtils.format(new Date(), "mm:ss"));
        logger.info(userService.getUserByUserId(1067246875900000001L).getMobile());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值