Spring Boot的定时任务与异步任务

简介: Spring Boot的定时任务与异步任务

【第一部分】历史文章:
SpringBoot总结(一)——第一个SpringBoot项目
SpringBoot总结(二)——Spring Boot的自动配置
SpringBoot总结(三)——SpringBoot的配置文件
SpringBoot总结(四)——@Value和@ConfigurationProperties的区别
SpringBoot总结(五)——@PropertySource注解与@ImportResource注解
SpringBoot总结(六)——SpringBoot配置文件占位符
SpringBoot总结(七)——Profile的使用
SpringBoot总结(八)——配置文件的加载位置
SpringBoot总结(九)——@Conditional注解与自动配置报告
SpringBoot总结(十)——SpringBoot+Mybatis实现数据库的CRUD(从创建到实现【超详细附代码】)
SpringBoot总结(十一)——SpringBoot的静态资源映射规则
SpringBoot总结(十二)——登录界面的实现
SpringBoot总结(十三)——修改嵌入式Servlet容器配置
SpringBoot总结(十四)——SpringBoot整合JDBCTemplate及Druid连接池
SpringBoot总结(十五)——接口架构风格(RESTful)
SpringBoot总结(十六)——Spring Boot的邮件发送


# Spring Boot的定时任务与异步任务 下面以简单的例子介绍Spring Boot的定时任务与异步任务:

@TOC


# 前言 定时任务是企业级开发中的最常见的功能之一,例如:统计订单数、数据库的备份、定时发送短信和邮件、定时统计博客访客等;简单的定时任务可以通过Spring中的 `@Scheduled`注解来实现;而复杂的定时任务可以通过Quartz来实现。

一、定时任务

@Scheduled是由Spring提供的定时任务注解,使用较为方便、配置简单,可以很好的解决大部分的定时任务需求。
下面进行简单介绍定时任务的使用:

1.创建项目

创建一个Spring Boot的Web工程,具体创建过程这里不再介绍。

2.开启定时任务

在项目的启动类上加上@EnableScheduling 注解来开启定时任务。

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
 * @author 
 */
@EnableScheduling 
@SpringBootApplication
public class SpringbootTaskApplication {
   
   

    public static void main(String[] args) {
   
   
        SpringApplication.run(SpringbootTaskApplication.class, args);
    }

}

3.配置定时任务

注:定时任务主要通过 @Scheduled注解来进行配置,示例代码如下所示:

package com.example.service;

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

import java.util.Date;

/**
 * @author 
 */
@Service
public class ScheduledService {
   
   

    @Scheduled(fixedDelay = 1000)
    public void scheduledTask1(){
   
   
        System.out.println("fixedDelay:"+new Date());
    }

    @Scheduled(fixedRate = 2000)
    public void scheduledTask2(){
   
   
        System.out.println("fixedRate:"+new Date());
    }

    @Scheduled(initialDelay = 1000,fixedRate = 2000)
    public void scheduledTask3(){
   
   
        System.out.println("initialDelay:"+new Date());
    }

    @Scheduled(cron = "0 * * * * ?")
    public void scheduledTask4(){
   
   
        System.out.println("cron:"+new Date());
    }

}

注:

  • @Scheduled注解来标注一个定时任务。
  • fixedDelay=1000表示:在当前任务执行结束1秒后开启另外一个任务
  • fixedRate=2000表示:当前任务开始执行2秒后开启另外一个定时任务
  • initialDelay=1000表示:首次执行的延迟时间
  • 在@Scheduled注解中也可以使用cron表达式。
  • 表达式:cron = "0 ?"表示该定时任务每分钟执行一次

    启动项目,控制台打印如下:
    在这里插入图片描述

二、异步任务

两个注解:

  • @EnableAsync 开启异步注解功能
  • @Async 一般用在类的方法上;若用在类上,表示这个类的所有的方法都是异步执行。

1.开启异步任务

在项目的启动类上加上@EnableAsync 注解。

package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
/**
 * @author 
 */
@EnableAsync 
@EnableScheduling   
@SpringBootApplication
public class SpringbootTaskApplication {
   
   

    public static void main(String[] args) {
   
   
        SpringApplication.run(SpringbootTaskApplication.class, args);
    }

}

2.简单使用示例

package com.example.task;

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

/**
 * @author 
 */

@Component
public class AsyncTask {
   
   

    @Async
    public void Task1() throws Exception{
   
   
        long start = System.currentTimeMillis();
        Thread.sleep(1000);
        long end = System.currentTimeMillis();
        System.out.println("task1耗时:"+(end-start)+"毫秒!");
    }
    public void Task2() throws Exception{
   
   
        long start = System.currentTimeMillis();
        Thread.sleep(2000);
        long end = System.currentTimeMillis();
        System.out.println("task2耗时:"+(end-start)+"毫秒!");
    }
    public void Task3() throws Exception{
   
   
        long start = System.currentTimeMillis();
        Thread.sleep(3000);
        long end = System.currentTimeMillis();
        System.out.println("task3耗时:"+(end-start)+"毫秒!");
    }
}

3.测试

    @GetMapping("/asynctasktest")
    public String AsyncTaskTest() throws Exception {
   
   
        long start = System.currentTimeMillis();
        asyncTask.Task1();
        asyncTask.Task2();
        asyncTask.Task3();
        long end = System.currentTimeMillis();
        System.out.println("全部完成一共耗时:" + (end - start) + "毫秒");
        return "执行完成!!!";
    }

<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">

总结

以上分别介绍了Spring Boot的定时任务与异步任务,以及用简单的示例进行了演示。希望通过以上例子能给予大家帮助。😊

关于本项目的示例代码获取方式:关注+私信并回复:【定时任务与异步任务】即可获取哦!!!

相关文章
|
26天前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
44 0
|
1月前
|
监控 Java 数据处理
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
|
8天前
|
Java Spring 容器
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
SpringBoot 使用Quartz执行定时任务对象时无法注入Bean问题
11 1
|
25天前
|
Java Spring
SpringBoot+async异步调用接口以及几个任务同时完成和异步接口实现和调用
SpringBoot+async异步调用接口以及几个任务同时完成和异步接口实现和调用
24 0
|
1月前
|
Java BI 调度
Spring Boot 整合xxl-job实现分布式定时任务
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 xxl是xxl-job的开发者大众点评的许雪里名称的拼音开头。
|
1月前
|
JavaScript Java API
spring boot使用异步多线程
一文讲清楚spring boot如何结合异步多线程实现文件的导出这类耗时间的操作优化以及常用的场景,了解异步思想
31 0
spring boot使用异步多线程
|
5月前
|
消息中间件 Java Kafka
SpringBoot中使用异步方法优化Service逻辑,提高接口响应速度
异步方法适用于逻辑与逻辑之间可以相互分割互不影响的业务中, 如生成验证码和发送验证码组成的业务, 其实无需等到真正发送成功验证码才对客户端进行响应, 可以让短信发送这一耗时操作转为异步执行, 解耦耗时操作和核心业务;
|
10月前
|
Java 程序员 数据库
Spring Boot异步方法:轻松提升性能,让你的应用更出色!
最近呢xxx接到了一个任务,是需要把AOP打印出的请求日志,给保存到数据库。xxx一看这个简单啊,不就是保存到数据库嘛。一顿操作猛如虎,过了20分钟就把这个任务完成了。xxx作为一个优秀的程序员,发现这样同步保存会增加了接口的响应时间。这肯定难不倒xxx,当即决定使用多线程来处理这个问题。终于在临近饭点完成了。准备边吃边欣赏自己的杰作时,外卖小哥临时走来了一句,搞这样麻烦干啥,你加个@Async不就可以了。
Spring Boot异步方法:轻松提升性能,让你的应用更出色!
|
18天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
25天前
|
Java API Spring
SpringBoot项目调用HTTP接口5种方式你了解多少?
SpringBoot项目调用HTTP接口5种方式你了解多少?
80 2