Java之SpringBoot定时任务案例讲解

下面是关于“Java之SpringBoot定时任务案例讲解”的完整攻略。

简介

在实际的项目中,我们时常需要定时执行一些任务,比如数据统计、数据备份、消息通知等。SpringBoot提供了很好的定时任务支持,本文将着重介绍如何使用SpringBoot实现定时任务,并提供两个示例。

步骤

1.依赖添加

pom.xml文件中添加以下依赖:

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

2.任务实现

任务实现类需要继承QuartzJobBean类,并实现其中的executeInternal方法。下面是一个简单的示例:

@Component
public class SimpleJob extends QuartzJobBean{

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Simple Job执行");
    }
}

3.任务调度

在SpringBoot项目中,可以通过注解方式进行任务调度。下面是通过注解方式实现任务调度的示例:

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail simpleJobDetail() {
        return JobBuilder.newJob(SimpleJob.class)
                .withIdentity("simpleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger simpleJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)
                .repeatForever();

        return TriggerBuilder.newTrigger()
                .forJob(simpleJobDetail())
                .withIdentity("simpleJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }
}

上述代码中,通过simpleJobDetail()方法定义了SimpleJob实现类的细节信息,并返回JobDetail类型的对象。通过simpleJobTrigger()方法定义了任务触发器的执行策略和执行逻辑,并返回Trigger类型的对象。

4.任务启动

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

        Scheduler scheduler = (Scheduler) context.getBean("schedulerFactoryBean");

        scheduler.start();
    }
}

在上述的代码片段中,通过Application类中的main方法启动SpringBoot应用,并通过调用scheduler.start()方法来启动任务调度器。

示例

接下来我们提供两个示例,帮助读者更好的理解上述步骤。

示例1

下面的示例将每隔5秒钟输出一条日志。

任务实现类:

@Component
public class SimpleJob extends QuartzJobBean{

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Simple Job执行");
    }
}

任务调度和任务启动类:

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail simpleJobDetail() {
        return JobBuilder.newJob(SimpleJob.class)
                .withIdentity("simpleJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger simpleJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)
                .repeatForever();

        return TriggerBuilder.newTrigger()
                .forJob(simpleJobDetail())
                .withIdentity("simpleJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

    @Bean
    public SchedulerFactoryBean getSchedulerFactoryBean() {
        SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
        scheduler.setTriggers(simpleJobTrigger());
        return scheduler;
    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

        Scheduler scheduler = (Scheduler) context.getBean("schedulerFactoryBean");

        scheduler.start();
    }
}

示例2

下面的示例将在每周一和每周五的凌晨3点执行一次。

任务实现类:

@Component
public class WeeklyJob extends QuartzJobBean{

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        System.out.println("Weekly Job执行");
    }
}

任务调度和任务启动类:

@Configuration
public class QuartzConfig {

    @Bean
    public JobDetail weeklyJobDetail() {
        return JobBuilder.newJob(WeeklyJob.class)
                .withIdentity("weeklyJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger weeklyJobTrigger() {
        CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("0 0 3 ? * MON,FRI");

        return TriggerBuilder.newTrigger()
                .forJob(weeklyJobDetail())
                .withIdentity("weeklyJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

    @Bean
    public SchedulerFactoryBean getSchedulerFactoryBean() {
        SchedulerFactoryBean scheduler = new SchedulerFactoryBean();
        scheduler.setTriggers(weeklyJobTrigger());
        return scheduler;
    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);

        Scheduler scheduler = (Scheduler) context.getBean("schedulerFactoryBean");

        scheduler.start();
    }
}

总结

至此,我们就完成了SpringBoot定时任务的案例讲解。SpringBoot提供了很好的定时任务支持,可以使得项目实现更多的自动化操作,大大提高开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之SpringBoot定时任务案例讲解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java 中Flyway的使用详解

    Java 中 Flyway 的使用详解 什么是 Flyway Flyway 是一款开源的数据库版本控制工具,采用简单易用的方式为数据库提供更好的管理。Flyway 是用 Java 语言编写的并且支持多种主流数据库,如 MySQL、PostgreSQL、Oracle 等。 Flyway 的工作原理如下: 创建一个名为 flyway_schema_history…

    Java 2023年5月20日
    00
  • java实现6种字符串数组的排序(String array sort)

    以下是“Java实现6种字符串数组的排序”的完整攻略: 1. 前言 在Java编程中,对字符串数组进行排序是一个经常遇到的需求。Java提供了多种方法来实现字符串数组的排序,本文将介绍6种实现方法。包括冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。 2. 冒泡排序 冒泡排序是一种简单的排序方法,它通过不断交换相邻的元素来将数组排序。 以下是一个示…

    Java 2023年5月26日
    00
  • Java实现医院管理系统

    Java实现医院管理系统完整攻略 简介 医院管理系统是一个涉及多种功能的系统,它包含的功能有:病人管理、医生排班、药品管理、患者预约挂号等。通过Java语言实现医院管理系统,可以大大提高医院管理的效率,同时也为医院的信息化建设做出了贡献。 技术选型 为了实现医院管理系统,我们需要选择适当的技术来支撑,具体如下: 后端框架:Spring Framework 数…

    Java 2023年5月19日
    00
  • Java实现无损Word转PDF的示例代码

    下面是详细讲解“Java实现无损Word转PDF的示例代码”的完整攻略。 1. 准备工作 在开始转换 Word 文档为 PDF 文件之前,需要进行一些准备工作: 安装相应的 Java 开发环境 引入相应的依赖库 将需要转换为 PDF 的 Word 文档准备好 2. 示例代码1 – 使用Apache POI进行文档转换 import java.io.File;…

    Java 2023年5月19日
    00
  • java实现随机输出300题四则运算

    实现随机输出300题四则运算,可以按照以下步骤进行: 1.确定实现方式 本任务可以使用Java编写程序实现,主要使用到Java中的随机数生成、循环、数组和文件输入输出等知识点。 2.生成题目和答案 具体的实现方式是,先随机生成两个数,并根据设定的随机数种子、操作符数量和数值范围等参数随机生成运算符和括号等标点符号,然后将随机生成的数和符号进行组合,形成一条计…

    Java 2023年5月26日
    00
  • mybatis之增删改查

    MyBatis之增删改查的完整攻略 MyBatis是一款优秀的持久层框架,它支持动态SQL生成,使得开发者可以方便地进行各种CRUD操作。本文将为大家介绍MyBatis如何进行增删改查操作。 添加数据 在MyBatis中进行添加数据操作即对应SQL中的INSERT语句。下面是一个示例代码: <!–添加数据–> <insert id=&q…

    Java 2023年5月20日
    00
  • Spring Boot+Mybatis的整合过程

    Spring Boot和MyBatis是两个非常流行的Java框架,它们可以很好地协同工作。在本攻略中,我们将详细讲解如何将Spring Boot和MyBatis整合,以及如何使用它们来构建一个完整的Web应用程序。 整合过程 1. 添加依赖 首先,我们需要在pom.xml文件中添加Spring Boot和MyBatis的依赖。以下是一个示例: <de…

    Java 2023年5月14日
    00
  • 如何避免Java内存溢出?

    如何避免Java内存溢出? Java内存溢出问题是Java开发中常见的问题之一。解决这类问题需要从以下方面考虑: 内存分配问题 内存泄漏问题 内存计算问题 下面我们分别来看一下如何避免Java内存溢出问题。 一、内存分配问题 在Java中,内存分配通过JVM自动管理。如果JVM配置不当,就会导致内存分配问题。 JVM内存配置Java应用使用的内存由JVM进行…

    Java 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部