springboot之定时任务

简介: 定时线程说到定时任务,通常会想到JDK自带的定时线程来执行,定时任务。回顾一下定时线程池。public static ScheduledExecutorService newScheduledThreadPool(int var0) { return new Scheduled...

定时线程

说到定时任务,通常会想到JDK自带的定时线程来执行,定时任务。
回顾一下定时线程池。

public static ScheduledExecutorService newScheduledThreadPool(int var0) {
        return new ScheduledThreadPoolExecutor(var0);
    }

    public static ScheduledExecutorService newScheduledThreadPool(int var0, ThreadFactory var1) {
        return new ScheduledThreadPoolExecutor(var0, var1);
    }

常用的两个方法:
scheduleAtFixedRate:是以固定的频率去执行任务,周期是指每次执行任务成功执行之间的间隔。

schedultWithFixedDelay:是以固定的延时去执行任务,延时是指上一次执行成功之后和下一次开始执行的之前的时间。

看一个DEMO:

public class ScheduledExecutorServiceDemo {
    public static void main(String args[]) {

        ScheduledExecutorService ses = Executors.newScheduledThreadPool(10);
        ses.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(4000);
                    System.out.println(Thread.currentThread().getId() + "执行了");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, 0, 2, TimeUnit.SECONDS);
    }
}

具体细节我就不再赘述了,有兴趣的可以查看我关于线程池的博客:链接

springboot的定时任务

pom的依赖:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

启动类启用定时

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@EnableScheduling
@SpringBootApplication
public class StartApplication {
    public static void main(String args[]){
        SpringApplication application = new SpringApplication(StartApplication.class);
        application.run(args);
    }
}

定时任务业务类:

package com.schedule;

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

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.atomic.AtomicInteger;

@Component
public class ScheduleTask {

    private static final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");

    private AtomicInteger count = new AtomicInteger();

    @Scheduled(fixedRate = 6000)
    public void  reportTime(){
        System.out.println("现在的时间是:"+format.format(new Date()));
    }

    /**
     * 以固定的频率去执行任务
     */
    @Scheduled(initialDelay = 10000,fixedRate = 3000)
    public void  reportNumber(){
        System.out.println(count.incrementAndGet());
    }

    /**
     * 以固定的延时去执行任务
     */
    @Scheduled(initialDelay = 10000,fixedDelay = 3000)
    public void  reportNumberDelay(){
        System.out.println(count.incrementAndGet());
    }
}

运行结果如下:

现在的时间是:09:59:57
1
2
现在的时间是:10:00:03
3
4
5
6
现在的时间是:10:00:09
7

使用说明:

  • @Scheduled(fixedRate = 1000) :上一次开始执行时间点之后1秒再执行
  • @Scheduled(fixedDelay = 1000) :上一次执行完毕时间点之后1秒再执行
  • @Scheduled(initialDelay=1000, fixedRate=6000) :第一次延迟1秒后执行,之后按fixedRate的规则每6秒执行一次
    @Scheduled(initialDelay=1000, fixedDelay=6000) :第一次延迟1秒后执行,之后按fixedDelay的规则每6秒执行一次

源码地址

个人博客网站 http://www.janti.cn
相关文章
|
Java 调度
Springboot 使用Quartz定时器执行多个定时任务 配置篇
Springboot 使用Quartz定时器执行多个定时任务 配置篇
731 0
Springboot 使用Quartz定时器执行多个定时任务 配置篇
|
存储 NoSQL Java
SpringBoot集成Redis业务功能 02、定时任务+Redis删除特定前缀key的优雅实现
SpringBoot集成Redis业务功能 02、定时任务+Redis删除特定前缀key的优雅实现
|
JavaScript Dubbo Java
SpringBoot实现定时任务的三种方式,总有一款适合你!
SpringBoot实现定时任务的三种方式,总有一款适合你!
SpringBoot实现定时任务的三种方式,总有一款适合你!
|
Java 数据库 Spring
SpringBoot实现动态增删启停定时任务
SpringBoot实现动态增删启停定时任务
443 0
SpringBoot实现动态增删启停定时任务
|
Oracle NoSQL Java
Springboot Quartz定时任务的动态调度使用,实战详解
Springboot Quartz定时任务的动态调度使用,实战详解
498 0
Springboot Quartz定时任务的动态调度使用,实战详解
|
Java Linux
Springboot2.x整合定时任务的小案例(某年某月某日执行)
有时候在开发中经常会使用一些定时的任务,比如果整点推送,或者是每隔一段时间给客户发送一个消息等等。这篇文章主要是通过Springboot整合Schedule来实现一个定时任务,非常的简单
315 0
Springboot2.x整合定时任务的小案例(某年某月某日执行)
|
存储 数据采集 JSON
基于springboot+redis+国际化+定时任务的疫情项目【已上线】
这是我自己做的一套疫情实时数据项目,有地图、折线图、表格 该项目涵盖了大部分springboot项目实际开发所必需的技术 因为爬取的页面官网做了变更,所以会有一些小问题,需要自行处理。
334 0
基于springboot+redis+国际化+定时任务的疫情项目【已上线】
|
Java 调度 Spring
SpringBoot实现异步任务以及定时任务
在绝大多数的java应用中,很多场景都是采用的是同步的方式交互,那么一旦如果有第三方进行交互,则很有可能就会产生交互延迟的问题,那么这种时候就得考虑使用多线程,但是在Spring3以后它就已经内置了异步任务供我们使用。
392 0
SpringBoot实现异步任务以及定时任务
|
Java 调度 Spring
SpringBoot 异步任务+定时任务(附源码)
SpringBoot 异步任务+定时任务(附源码)
149 0
SpringBoot 异步任务+定时任务(附源码)