Spring boot定时器单机版(单线程)

版权声明:所有原创,转载请在开头注明出处 https://blog.csdn.net/SELECT_BIN/article/details/82252998

一、Spring定时器

搭框架的不再赘述,吉特哈贝上很多滴;

在Spring Boot中实现定时任务功能,可以通过Spring自带的定时任务调度,也可以通过集成经典开源组件Quartz实现任务调度。

1、cron表达式方式(适用于重复性的执行,类似于定时器)

使用自带的定时任务,非常简单,只需要像下面这样,加上注解就好,不需要像普通定时任务框架那样继承任何定时处理接口 ,简单示例代码如下:

package com.ai.rai.group.system;

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @version 1.0
 * @ClassName SpringTaskA
 * @Description todo
 * @Author 74981
 * @Date 2018/8/31 10:44
 */
@Component
@EnableScheduling
public class SpringTaskA {
    /**
     * CRON表达式参考:http://cron.qqe2.com/
     **/
    @Scheduled(cron = "0/20 * * * * ? ", zone = "GMT+8:00")
    public void timerCorn(){
        System.out.println(String.format("(timerCron)%s 每隔20秒执行一次,记录日志", new Date()));
    }

}

控制台信息:

2、fixedRate和fixedDelay(适用于固定间隔的触发,比如每隔5分钟触发一次)

package com.ai.rai.group.system;

import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @version 1.0
 * @ClassName SpringTaskB
 * @Description todo
 * @Author 74981
 * @Date 2018/8/31 10:59
 */
@Component
@EnableScheduling
public class SpringTaskB {

    /*fixedRate:上一次开始执行时间点之后10秒再执行*/
    @Scheduled(fixedRate = 10000)
    public void timerFixedRate(){
        System.out.println(String.format("(fixedRate)现在时间:%s", new Date()));
    }

    /*fixedDelay:上一次执行完毕时间点之后8秒再执行*/
    @Scheduled(fixedDelay = 8000)
    public void timerFixedDelay(){
        System.out.println(String.format("(fixedDelay)现在时间:%s", new Date()));
    }

    /*第一次延迟3秒后执行,之后按fixedDelay的规则每5秒执行一次*/
    @Scheduled(initialDelay = 3000,fixedDelay = 5000)
    public void timenInitDelay(){
        System.out.println(String.format("(initDelay)现在时间:%s", new Date()));
    }
}

效果:

注意一下主要区别:

@Scheduled(fixedRate = 5000) :上一次开始执行时间点之后5秒再执行

@Scheduled(fixedDelay = 5000) :上一次执行完毕时间点之后5秒再执行

@Scheduled(initialDelay=2000, fixedDelay=5000) :第一次延迟2秒后执行,之后按fixedDelay的规则每5秒执行一次

有时候,很多项目我们都需要配置好定时任务后立即执行一次,initialDelay就可以不用配置了。

3、zone

@Scheduled注解还有一个熟悉的属性zone,表示时区,通常,如果不写,定时任务将使用服务器的默认时区;如果你的任务想在特定时区特定时间点跑起来,比如常见的多语言系统可能会定时跑脚本更新数据,就可以设置一个时区,如东八区,就可以设置为:

zone = "GMT+8:00"

二、Quartz

Quartz是应用最为广泛的开源任务调度框架之一,有很多公司都根据它实现自己的定时任务管理系统。Quartz提供了最常用的两种定时任务触发器,即SimpleTrigger和CronTrigger,本文以最广泛使用的CronTrigger为例。

添加依赖,这个如果是用IDEA+maven管理的话很方便,

如果不是的话:

加入依赖:

<dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>

算了,这个用起来太麻烦了,有空再写吧

扩展阅读:

很多公司都会有自己的定时任务调度框架和系统,在Spring Boot中如何整合Quartz集群,实现动态定时任务配置?

http://www.cnblogs.com/vincent0928/p/6294792.html

http://www.cnblogs.com/zhenyuyaodidiao/p/4755649.html

猜你喜欢

转载自blog.csdn.net/SELECT_BIN/article/details/82252998