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 泛型总结(二):泛型与数组

    Java 泛型总结(二):泛型与数组 在 Java 中,泛型和数组是两个不同的概念,但它们之间的关系比较微妙,需要仔细理解。本篇文章将讲解 Java 泛型和数组的关系,旨在帮助读者更深入理解 Java 泛型的本质。 泛型与数组的不同 泛型是编译期检查的,而数组是运行期检查的。这意味着,我们可以编写泛型代码来确保模板类型的安全性,一旦编译通过,就可以放心使用。…

    Java 2023年5月26日
    00
  • Java负载均衡算法实现之轮询和加权轮询

    下面是详细讲解Java负载均衡算法实现之轮询和加权轮询的完整攻略。 1. 负载均衡简介 负载均衡是指将工作负载分摊到多个处理单元上,以达到更好的性能、可扩展性和可靠性,可以被应用于各种计算系统中,包括数据库、Web服务器、应用服务器等等。负载均衡算法就是如何分配负载到各个处理单元的问题。 2. 轮询算法 轮询算法是最常见的负载均衡算法之一,其基本原理是按照事…

    Java 2023年5月19日
    00
  • maven

    # maven 1. maven基础 Maven是apache提供的一个项目管理工具,它的作用就是管理项目 2. maven作用 1). 依赖管理[方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题] 1. 依赖 denpendency 依赖(坐标):一个jar包 groupId 公司域名倒写 artifactId 项目名 version 版本号 坐…

    Java 2023年5月2日
    00
  • 详解Java中两种分页遍历的使用姿势

    详解Java中两种分页遍历的使用姿势 在 Java 中,分页遍历是非常实用的功能之一,常用于应用中数据分页展示,提高用户体验。本文将介绍 Java 中两种分页遍历的使用姿势,并附上示例说明。 1. 基于MySQL的分页查询 在 MySQL 中,可以使用 LIMIT 关键字实现分页功能。具体使用方式如下: SELECT * FROM table_name LI…

    Java 2023年5月26日
    00
  • Java中匿名类的两种实现方式

    Java中匿名类的两种实现方式: 1. 作为实参传递 在Java语言中,我们可以通过将一个匿名类作为实参传递给某个方法或构造方法来实现匿名类的创建和使用。 示例1: public class AnonymousClass { public static void main(String[] args) { Thread thread = new Thread…

    Java 2023年5月18日
    00
  • Java超详细讲解如何生成随机整数

    生成随机整数在Java中是一个非常主要和常见的任务,可以使用Java自带的数学随机数发生器类或者第三方库中的随机数工具类来实现。下面是Java超详细讲解如何生成随机整数的完整攻略: 一、使用Java自带的数学随机数发生器类 Java自带的数学随机数发生器类是 java.util.Random ,它可以用来生成伪随机数。下面是使用该类生成随机整数的代码示例: …

    Java 2023年5月26日
    00
  • 详解SpringBoot中异步请求和异步调用(看完这一篇就够了)

    下面我将为您详细讲解“详解SpringBoot中异步请求和异步调用(看完这一篇就够了)” 的完整攻略。 什么是异步请求和异步调用 在Web编程中,我们通常使用同步方式来处理客户端请求,即客户端向服务端发送请求后,服务端会一直等待直到完成响应,然后再返回响应结果。而异步方式则是一种非阻塞IO的处理模式,即客户端向服务端发送请求后,服务端不会立即返回响应结果,而…

    Java 2023年5月19日
    00
  • jsp编程去除空白行的方法

    下面是“jsp编程去除空白行的方法”的完整攻略: 1. 使用JSTL标签库 JSP的JSTL标签库中提供了c:out标签,可以将JSP页面中的换行、空格等无效字符去掉,实现去除空白行的效果。具体操作步骤如下: 在JSP页面中引入JSTL标签库 <%@ taglib prefix="c" uri="http://java.s…

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