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日

相关文章

  • 魔兽世界7.3.5鸟德怎么堆属性 wow7.35平衡德配装属性优先级攻略

    魔兽世界7.3.5鸟德怎么堆属性 wow7.35平衡德配装属性优先级攻略 属性优先级 鸟德的属性优先级为: 敏捷 > 精通 > 爆击 > 急速 >= 全能 其中,敏捷是最为重要的属性,精通和爆击次之,急速和全能处于第三位。在进行配装时,需要尽可能提高敏捷、精通和爆击属性,尽量保持急速和全能不低于一定数值。 配装建议 珠宝 珠宝槽中,需…

    other 2023年6月27日
    00
  • React-router v4 路由配置方法小结

    React-router v4 路由配置方法小结 React-router v4 是一个用于构建单页应用程序的常用路由库。它提供了一种简单而灵活的方式来管理应用程序的路由。 安装 首先,你需要在你的项目中安装 react-router-dom 包。你可以使用 npm 或者 yarn 进行安装: npm install react-router-dom 或者 …

    other 2023年7月28日
    00
  • 详解Python函数作用域的LEGB顺序

    详解Python函数作用域的LEGB顺序 在Python中,函数作用域是指变量的可见性和访问性。Python使用LEGB规则来确定变量的作用域,即Local(局部)、Enclosing(嵌套)、Global(全局)和Built-in(内置)的顺序。下面将详细解释每个作用域的含义和查找顺序。 Local(局部)作用域 局部作用域是指在函数内部定义的变量。这些变…

    other 2023年8月19日
    00
  • Linux命令行删除文件实操方法

    下面是针对“Linux命令行删除文件实操方法”的完整攻略。 一、前言 在日常使用 Linux 命令行的过程中,我们可能需要删除一些文件以释放磁盘空间。本篇指南将详细介绍 Linux 命令行删除文件的实操方法,以及需要注意的事项。 二、删除单个文件 如果要删除单个文件,我们可以使用 rm 命令。例如,要删除文件 /home/user/file1,可以执行以下命…

    other 2023年6月26日
    00
  • 苹果WWDC 2016开发者大会时间确定:发布iOS10/OS X 10.12

    苹果WWDC 2016开发者大会时间确定:发布iOS10/OS X 10.12 苹果公司每年都会举办一次WWDC(Worldwide Developers Conference,全球开发者大会)活动,这是一场面向苹果公司的开发者和供应商的综合性展览及技术交流活动。在本次WWDC 2016上,苹果公司发布了iOS 10和OS X 10.12等众多新产品和新技术…

    other 2023年6月26日
    00
  • Java项目开发命名规范(动力节点Java学院整理)

    Java项目开发命名规范攻略 1. 包名规范 包名应该全部小写,使用英文单词或者单词的缩写。 包名应该反映出项目的层次结构,例如:com.example.project。 避免使用Java关键字或者保留字作为包名。 示例说明: package com.example.project.controller; public class UserControlle…

    other 2023年8月16日
    00
  • Vue 多层组件嵌套二种实现方式(测试实例)

    Vue 多层组件嵌套的两种实现方式 在Vue中,我们可以使用组件来构建复杂的应用程序。多层组件嵌套是一种常见的场景,它可以帮助我们将应用程序的不同部分进行模块化和组织。本攻略将介绍两种实现多层组件嵌套的方式,并提供两个示例说明。 1. 使用props传递数据 第一种实现方式是使用props来传递数据。在Vue中,我们可以在父组件中定义一个属性,并将其传递给子…

    other 2023年7月27日
    00
  • 深入解析Java的设计模式编程中单例模式的使用

    深入解析Java的设计模式编程中单例模式的使用 什么是单例模式 单例模式是一种常用的创建型设计模式,它保证一个类只有一个实例,并且提供了能访问这个实例的全局访问点。在实际的开发中,单例模式被广泛应用。 单例模式的使用场景 在如下场景中,通常建议使用单例模式: 系统中只需要存在一个实例对象 系统频繁创建和销毁对象,造成大量的资源浪费时 全局操作都能够使用同一个…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部