SpringBoot如何实现定时任务示例详解

SpringBoot如何实现定时任务示例详解

步骤一:添加依赖

首先,在SpringBoot项目中,我们需要添加相关依赖来支持定时任务的功能。在pom.xml文件中添加以下依赖:

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

上述依赖中,spring-boot-starter提供了Spring Boot的基本功能支持,spring-boot-starter-quartz提供了Quartz作为定时任务的引擎。

步骤二:创建定时任务类

接下来,我们需要创建一个定时任务类,用于定义具体的定时任务逻辑。在这个类上使用Quartz的注解@DisallowConcurrentExecution@PersistJobDataAfterExecution,分别表示不允许任务并发执行和任务执行后持久化相关数据。

示例代码:

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class MyJob extends QuartzJobBean {

    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 定时任务执行逻辑
        System.out.println("定时任务执行中...");
    }
}

上述代码中,MyJob类继承了QuartzJobBean,并重写了executeInternal方法,该方法就是定时任务的具体执行逻辑。

步骤三:配置定时任务

接下来,我们需要在SpringBoot的配置文件中配置定时任务的相关属性。在application.properties中添加以下内容:

# 定时任务配置
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.tablePrefix=QRTZ_
spring.quartz.properties.org.quartz.jobStore.isClustered=false

上述配置说明:

  • spring.quartz.job-store-type:指定任务存储的方式,这里设置为jdbc表示采用JDBC方式存储任务;
  • spring.quartz.properties.org.quartz.jobStore.driverDelegateClass:指定任务存储的数据库驱动类;
  • spring.quartz.properties.org.quartz.jobStore.tablePrefix:指定任务存储的数据库表前缀;
  • spring.quartz.properties.org.quartz.jobStore.isClustered:指定是否开启集群模式。

步骤四:创建定时任务触发器

最后一步是创建定时任务的触发器。在SpringBoot应用启动时,Quartz会自动扫描带有@DisallowConcurrentExecution注解的定时任务类,并根据注解的设置创建相应的触发器。

示例代码:

import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuartzConfig {

    @Autowired
    private MyJob myJob;

    @Bean
    public JobDetail myJobDetail() {
        return JobBuilder.newJob().ofType(myJob.getClass()).storeDurably().build();
    }

    @Bean
    public Trigger myJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(10) // 每10秒执行一次
                .repeatForever();

        return TriggerBuilder.newTrigger().forJob(myJobDetail())
                .withSchedule(scheduleBuilder)
                .build();
    }
}

上述代码中,QuartzConfig类使用@Configuration注解,将其标记为配置类。通过@Autowired注解,将MyJob类注入到该配置类中。然后通过@Bean注解,创建JobDetailTrigger实例,并定义触发器的执行规则。

示例一:每隔一分钟执行一次定时任务

在上述的步骤四中,我们创建的触发器默认是每10秒执行一次定时任务。如果我们想要每隔一分钟执行一次定时任务,可以修改代码中的触发器配置。

示例代码:

@Bean
public Trigger myJobTrigger() {
    SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInSeconds(60) // 每60秒执行一次
            .repeatForever();

    return TriggerBuilder.newTrigger().forJob(myJobDetail())
            .withSchedule(scheduleBuilder)
            .build();
}

在上述代码中,修改了触发器的配置,将执行间隔修改为60秒。

示例二:每天指定时间执行定时任务

如果我们需要实现每天的指定时间执行定时任务,可以使用Quartz的CronScheduleBuilder来定义触发器执行规则。

示例代码:

@Bean
public Trigger myJobTrigger() {
    CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 8 * * ?"); // 每天上午8点执行
    return TriggerBuilder.newTrigger().forJob(myJobDetail())
            .withSchedule(scheduleBuilder)
            .build();
}

在上述代码中,使用了Cron表达式来定义每天上午8点执行。

总结

通过以上步骤,我们可以使用SpringBoot和Quartz实现定时任务。首先添加相应的依赖,然后创建定时任务类,并配置相关属性和触发器。最后,可以根据需求调整定时任务的执行规则。

希望以上的解答能够帮助到你,如果有任何疑问,请随时提问!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot如何实现定时任务示例详解 - Python技术站

(0)
上一篇 2023年6月28日
下一篇 2023年6月28日

相关文章

  • IOS开发自定义view方法规范示例

    下面我将为大家分享如何制作iOS开发自定义view的方法规范示例。 什么是自定义view 自定义view是指程序员自己定义的在iOS应用中用来显示内容的视图控件,可以自己控制视图的外观和行为,更灵活地满足业务需求。 自定义view可以具有以下特点: 可以自由定义视图外观 可以自定义视图的交互 可以封装业务逻辑 制作自定义view的步骤 继承UIView类,实…

    other 2023年6月25日
    00
  • Outliner大纲式笔记软件介绍

    Outliner大纲式笔记软件介绍 简介 Outliner大纲式笔记软件是一款十分实用的笔记应用程序。其主要特点是使用大纲形式组织和管理笔记,便于用户快速的编写和查看笔记内容。同时,Outliner大纲式笔记软件还支持多平台同步,以保证用户可以随时随地的访问自己的笔记内容。 功能特点 1. 大纲编辑 Outliner大纲式笔记软件支持大纲式编辑,用户可以根据…

    其他 2023年3月28日
    00
  • stompjs使用文档总结

    stompjs使用文档总结 简介 StompJS 是一个用于浏览器和 Node.js 的简单、有效且易于使用的 STOMP 客户端。 STOMP 是一种流行的文本协议,用于通过消息队列传输协议(例如 Apache ActiveMQ,RabbitMQ 等)进行异步消息传递。 此客户端基于 Websockets(在现代浏览器中)或 AJAX 长轮询(在较旧浏览器…

    其他 2023年3月29日
    00
  • iOS 13.7/iPadOS 13.7正式版更新了什么?iOS 13.7/iPadOS 13.7正式版更新

    iOS 13.7/iPadOS 13.7正式版更新攻略 简介 iOS 13.7/iPadOS 13.7是苹果公司发布的最新操作系统版本。该版本主要着重于修复一些问题和改进用户体验。以下是iOS 13.7/iPadOS 13.7正式版的更新内容。 更新内容 1. COVID-19接触通知 iOS 13.7/iPadOS 13.7引入了COVID-19接触通知功…

    other 2023年8月3日
    00
  • python里使用正则表达式的组嵌套实例详解

    Python正则表达式的组嵌套实例详解 正则表达式是一种强大的文本匹配工具,可以在Python中使用re模块进行操作。组嵌套是正则表达式中的一种高级技巧,可以用来实现更复杂的匹配和提取操作。本攻略将详细讲解Python中使用正则表达式的组嵌套实例,并提供两个示例说明。 1. 组嵌套的基本语法 组嵌套是通过在正则表达式中使用圆括号来实现的。基本语法如下: (o…

    other 2023年7月28日
    00
  • Win10预览版19041.208新功能怎么使用?

    下面是针对Win10预览版19041.208新功能的详细攻略: 一、新功能介绍 Win10预览版19041.208的新功能主要包括以下几点: 改进了Windows Sandbox虚拟机的性能和安全性,提高虚拟机的整体响应速度和性能表现。 增强了Cortana语音助手的功能,如添加了天气和日历的实时更新功能。 提供了新的定时功能,将自动关闭计算机与“dism”…

    other 2023年6月27日
    00
  • java编程创建型设计模式单例模式的七种示例

    首先,我们需要了解什么是设计模式。设计模式是软件开发过程中对常见问题的反复实践和总结,是一套经过验证的、反复使用的具有普遍适用性的解决方案。在Java编程中,单例模式是最为常见的设计模式之一。 单例模式的定义 单例模式是一种创建型设计模式,它能够保证一个类在任何情况下都只有一个实例,并提供了一个访问该实例的全局访问点。 单例模式的优点和适用场景 单例模式具有…

    other 2023年6月27日
    00
  • html5video视频标签全属性详解

    HTML5 Video 视频标签全属性详解 HTML5 视频标签 <video> 是用于在网页上嵌入视频的标准标签。它提供了很多属性,使得我们能够对视频的播放、尺寸、样式等进行控制。本篇文章将会详细介绍 <video> 标签的所有属性及其用法。 基本属性 src:视频文件的 URL 地址。 controls:显示播放器控件,包括播放/…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部