首页 > 其他分享 >Spring Boot + Spring Batch + Quartz 整合定时批量任务

Spring Boot + Spring Batch + Quartz 整合定时批量任务

时间:2024-07-27 18:54:18浏览次数:19  
标签:Quartz spring Spring Boot springframework quartz org import

 ​

 博客主页:     南来_北往

系列专栏:Spring Boot实战


前言

最近一周,被借调到其他部门,赶一个紧急需求,需求内容如下:

PC网页触发一条设备升级记录(下图),后台要定时批量设备更新。这里定时要用到Quartz,批量数据处理要用到SpringBatch,二者结合,可以完成该需求。

由于之前,没有用过SpringBatch,于是上网查了下资料,发现可参考的不是很多,于是只能去慢慢的翻看官方文档。

Spring Batch - Reference Documentation

具体实现

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

<dependencies>
    <!-- Spring Boot -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-batch</artifactId>
    </dependency>
    <!-- Quartz -->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-quartz</artifactId>
    </dependency>
</dependencies>

 在application.properties文件中添加以下配置:

spring.quartz.job-store-type=memory
spring.quartz.properties.org.quartz.scheduler.instanceName=MyScheduler
spring.quartz.properties.org.quartz.threadPool.threadCount=5

 创建一个实现Job接口的类,例如MyBatchJob

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.quartz.QuartzJobBean;

public class MyBatchJob extends QuartzJobBean {

    @Autowired
    private JobLauncher jobLauncher;

    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        try {
            jobLauncher.run(myBatchJob(), new JobParametersBuilder().addString("JobID", String.valueOf(System.currentTimeMillis())).toJobParameters());
        } catch (Exception e) {
            throw new JobExecutionException(e);
        }
    }

    private Job myBatchJob() {
        // 返回你的Spring Batch Job实例
    }
}

 在你的配置类中(例如ApplicationConfig),添加一个SchedulerFactoryBean的Bean,用于配置定时任务的触发器:

import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class ApplicationConfig {

    @Bean
    public JobDetail myBatchJobDetail() {
        return JobBuilder.newJob(MyBatchJob.class)
                .withIdentity("myBatchJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger myBatchJobTrigger() {
        SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(60) // 设置任务执行间隔,例如每60秒执行一次
                .repeatForever(); // 设置任务重复执行

        return TriggerBuilder.newTrigger()
                .forJob(myBatchJobDetail())
                .withIdentity("myBatchJobTrigger")
                .withSchedule(scheduleBuilder)
                .build();
    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean() {
        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        schedulerFactoryBean.setJobDetails(myBatchJobDetail());
        schedulerFactoryBean.setTriggers(myBatchJobTrigger());
        return schedulerFactoryBean;
    }
}

现在,你已经成功地整合了Spring Boot、Spring Batch和Quartz,实现了定时批量任务。每隔指定的时间间隔(例如60秒),MyBatchJob将会被执行一次。

标签:Quartz,spring,Spring,Boot,springframework,quartz,org,import
From: https://blog.csdn.net/2301_76419561/article/details/140739550

相关文章

  • SpringBoot上传和下载文件
    SpringBoot上传和下载文件创建表DROPTABLEIFEXISTS`file`;CREATETABLE`file`(`id`int(0)NOTNULL,`filename`varchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_0900_ai_ciNULLDEFAULTNULLCOMMENT'文件名',`path`varchar(255)CHARACTERSE......
  • 基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)
    基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)基于微信小程序+SpringBoot+Vue的校园自助打印系统(带1w+文档)管理信息可以处理复杂的信息从而提高用户的工作效率,减少失误。所以本基于Vue和微信小程序的校园自助打印系统的开发非常有意义,本系统里的信......
  • SpringCloud+Vue3多对多,多表联查
    ♥️作者:小宋1021......
  • Spring 常用的三种拦截器详解
    前言在开发过程中,我们常常使用到拦截器来处理一些逻辑。最常用的三种拦截器分别是AOP、Interceptor、Filter,但其实很多人并不知道什么时候用AOP,什么时候用Interceptor,什么时候用Filter,也不知道其拦截顺序,内部原理。今天我们详细介绍一下这三种拦截器。拦截器顺序我们现在有......
  • 计算机毕业设计SpringBoot+vue的洗衣店客户管理信息系统
    随着人们生活水平的提高,人们的衣物越来越多,而时间精力却越来越少,于是洗衣店的需求正在急剧增加,洗衣店有着很大的发展潜力,但根据对洗衣店的现状和需求调查研究表明,目前国内的洗衣店的发展仍然落后于市场的需求。减轻家务劳动的压力,寻求专业便捷的洗衣服务已经成为大多数人的选择......
  • SpringBoot中使用监听器
    1.定义一个事件/***定义事件*@authorhrui*@date2024/7/2512:46*/publicclassCustomEventextendsApplicationEvent{privateStringmessage;publicCustomEvent(Objectsource,Stringmessage){super(source);this.message......
  • 计算机毕业设计ssm/springoot商场停车场服务系统
    通过对商场用户停车服务管理的调查研究,要求系统具有以下功能: 1.全面展示停车场的服务功能及环境。  2.存储用户信息。 3.车位信息用户进行入场停车功能。4.入场停车用户进行出场缴费功能,管理员进行审核。5.停车记录用户进行支付功能,管理员进行审核。  6.提供管......
  • 计算机毕业设计ssm/springoot网上购物商城系统kgyax源码lw包调试
    框架:ssm/springoot都有jdk版本:1.8及以上ide工具:IDEA或者eclipse数据库:mysql 编程语言:java前端:layui+bootstrap+jsp详细技术:HTML+CSS+JS+jsp+springmvc+mybatis+MYSQL+MAVEN+tomcat开发工具IntelliJIDEA:一先进的IDE,用于java开发,提供了丰富的工具和功能。开......
  • Spring中使用到的设计模式及其源码分析
    前言众所周知,Spring框架是一个强大而灵活的开发框架。这不,上次的面试刚问到这些,没防住!!!因此下来总结一下。这篇文章主要介绍Spring中使用到的设计模式,自己做个面试复盘,同时希望能帮助到其他小伙伴儿们。工厂模式相信大家面试题都背过,Spring通过工厂模式来创建和管理Bean......
  • 【Android驱动05】通过U-Boot来设置启动参数cmdline将数据传递给应用层的方法
    在Android系统中,通过U-Boot(通常称为uboot)来设置启动参数(如cmdline)或尝试直接将数据传递给应用层(通过系统属性property)是一个较为间接的过程,因为U-Boot主要负责硬件初始化和引导Linux内核,而Android系统属性则是由Android系统服务(如init进程和property服务)管理的。不过,我们可......