SpringBoot整合Quartz方法详解

yizhihongxing

下面我给您详细讲解“SpringBoot整合Quartz方法详解”的完整攻略。

一、简介

Quartz是一个任务调度框架,它能够让我们实现定时任务的调度,SpringBoot与Quartz的整合,可以让我们更加方便地实现定时任务的管理和调度。本篇文章将详细介绍SpringBoot如何整合Quartz框架。

二、准备工作

在开始整合之前,我们需要准备以下工作:

  1. JDK 1.8或以上
  2. Maven项目管理工具
  3. Eclipse或IntelliJ IDEA等Java开发工具
  4. SpringBoot及相关依赖(本文以2.3.0.RELEASE版本为例)
  5. Quartz相关依赖(本文以2.3.2版本为例)

三、创建项目

首先,我们需要在Eclipse或者IntelliJ IDEA等Java开发工具中,创建一个Maven项目,然后在pom.xml文件中添加如下依赖:

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

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

<dependency> 
    <groupId>org.quartz-scheduler</groupId> 
    <artifactId>quartz-jobs</artifactId> 
    <version>2.3.2</version> 
</dependency>

这几个依赖分别是SpringBoot web、SpringBoot quartz和Quartz jobs的依赖。

四、配置Quartz

在项目根目录下,创建一个quartz.properties文件,添加如下配置:

org.quartz.scheduler.instanceName = Scheduler
org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.useProperties = false
org.quartz.jobStore.dataSource = myDataSource
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.dataSource.myDataSource.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDataSource.URL = jdbc:mysql://localhost:3306/quartz
org.quartz.dataSource.myDataSource.user = root
org.quartz.dataSource.myDataSource.password = 123456
org.quartz.dataSource.myDataSource.maxConnections = 10

这里的配置项包括:Scheduler的实例名称、线程池的实现、Job存储的方式、数据源等。

五、编写定时任务

首先,我们需要编写一个定时任务类,如下:

@Component
public class TaskJob extends QuartzJobBean {

    private static Logger logger = LoggerFactory
            .getLogger(TaskJob.class);

    @Override
    protected void executeInternal(JobExecutionContext context)
            throws JobExecutionException {

        logger.info("[TaskJob正在执行]");
        // 执行具体的业务逻辑
        // ...
    }
}

这里我们使用@Component注解将定时任务类TaskJob注册为SpringBean,实现Spring与Quartz的无缝整合。

然后,在SpringBoot的配置类中配置SchedulerFactoryBean,如下:

@Configuration
public class QuartzConfig {

    @Autowired
    private TaskJob taskJob;

    /**
     * 创建JopDetail实例
     */
    @Bean(name = "jobDetail")
    public MethodInvokingJobDetailFactoryBean detailFactoryBean() {

        MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean();
        // 是否并发执行
        bean.setConcurrent(false);
        // 设置定时任务的名字
        bean.setName("srdjan_job");
        // 设置定时任务的分组,这些属性都可以在数据库中进行修改
        bean.setGroup("srdjan");
        // 需要执行的对象
        bean.setTargetObject(taskJob);
        // 需要执行的方法
        bean.setTargetMethod("execute");
        return bean;

    }

    /**
     * 创建Trigger实例
     */
    @Bean(name = "jobTrigger")
    public CronTriggerFactoryBean cronTriggerFactoryBean() {

        CronTriggerFactoryBean stFactory = new CronTriggerFactoryBean();
        stFactory.setJobDetail(detailFactoryBean().getObject());
        stFactory.setName("srdjan_trigger");
        // cron表达式,用于触发器
        stFactory.setCronExpression("0/5 * * * * ? *");
        return stFactory;

    }

    /**
     * 创建Scheduler实例
     */
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactory() {

        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        // 设置Quartz参数
        bean.setOverwriteExistingJobs(true);
        // 延时启动,应用启动1秒后
        bean.setStartupDelay(1);
        // 注册触发器
        bean.setTriggers(cronTriggerFactoryBean().getObject());
        return bean;

    }
}

这里的配置包括:定义JopDetail实例、定义Trigger实例、定义Scheduler实例。

六、运行项目

代码编写完成后,我们可以在指定的时间点查看到Job已经被调度起来了。当然,这需要我们先启动SpringBoot项目,然后等待定时任务的触发时间到来。

其中一个示例代码的运行结果如下所示:

2021-06-22 09:38:00.127  INFO 4696 --- [   scheduling-1] c.w.s.q.TaskJob                      : [TaskJob正在执行]
2021-06-22 09:38:05.133  INFO 4696 --- [   scheduling-1] c.w.s.q.TaskJob                      : [TaskJob正在执行]
2021-06-22 09:38:10.127  INFO 4696 --- [   scheduling-1] c.w.s.q.TaskJob                      : [TaskJob正在执行]

七、总结

通过本文的介绍,我们已经成功实现了SpringBoot与Quartz的整合,进而实现了定时任务的调度。在实际开发过程中,我们可以根据自身需求,更加灵活地配置定时任务的执行策略。

另外,本文中的示例代码已经上传至GitHub,供大家参考:https://github.com/JustDoItSrdjan/SpringBoot-Quartz

希望通过本文的学习,能够让大家对SpringBoot与Quartz的整合有更深入的认识,并且能够顺利地实现自己的定时任务需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot整合Quartz方法详解 - Python技术站

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

相关文章

  • Spring Data JPA例子代码[基于Spring Boot、Mysql]

    下面是“Spring Data JPA例子代码[基于Spring Boot、Mysql]”的完整攻略。 简介 Spring Data JPA是基于JPA规范的一种框架,结合Spring Data,可以方便地访问和操作关系型数据库。本文基于Spring Boot和Mysql数据库,演示了Spring Data JPA的使用方法。 前置准备 在开始之前,您需要准…

    Java 2023年6月2日
    00
  • java jdbc连接和使用详细介绍

    Java JDBC连接和使用详细介绍 什么是JDBC? JDBC(Java Database Connectivity)是Java语言操作数据库的统一接口,它为访问不同的数据库提供了一个标准的类库。使用JDBC可以实现Java和数据库的交互操作。 JDBC步骤 使用JDBC进行数据库操作主要包括以下步骤: 加载JDBC驱动程序 建立数据库连接 创建Prepa…

    Java 2023年5月23日
    00
  • Spring oxm入门实例

    Spring OXM 简介 Spring OXM 是 Spring Framework 中的一个模块,主要用于支持对象到 XML 和 XML 到对象的互相转换。OXM 是 Object/XML Mapping 的缩写,常用于系统之间的数据传输或存储,例如将 Java 对象序列化为 XML 格式存入数据库或者网络传输,另一方也可以将 XML 格式还原为 Jav…

    Java 2023年5月20日
    00
  • idea使用外置tomcat配置springboot详细步骤

    下面是我为你准备的“idea使用外置tomcat配置springboot详细步骤”的攻略。希望能对你有所帮助。 1. 确定工具版本 在开始这个过程之前,我们需要确定使用的工具版本,以确保配置的正确性。以下是我们使用的工具版本: IDE: IntelliJ IDEA 2020.2 Tomcat: Apache Tomcat 9.0.38 Spring Boot…

    Java 2023年5月19日
    00
  • 基于javaweb+jsp实现企业财务记账管理系统

    基于javaweb+jsp实现企业财务记账管理系统的完整攻略如下: 一、技术选型 企业财务记账管理系统需要具备良好的交互性与可扩展性,因此我们选择了以下技术来实现: JavaWeb:使用JavaWeb进行web开发,具有良好的跨平台性和稳定性。 JSP:使用JSP来设计前端页面,可以方便地调用Java代码实现动态页面。 MySQL:使用MySQL来存储系统数…

    Java 2023年5月24日
    00
  • SpringBoot使用ExceptionHandler做异常处理

    SpringBoot是一个非常流行的Java框架,其内置了大量的工具和库,可以大大地提升Java开发的效率。 在实际的应用开发中,异常处理是一个非常重要的问题。使用SpringBoot中的ExceptionHandler可以很方便地处理异常,本文将详细讲解如何实现这个功能。 实现步骤 下面是实现SpringBoot使用ExceptionHandler做异常处…

    Java 2023年5月27日
    00
  • 说说Java异步调用的几种方式

    下面我将详细讲解Java异步调用的几种方式及其示例: 什么是异步调用 异步调用是指在调用函数时,不会等待函数执行完成才返回结果,而是在函数执行的同时继续执行其他的代码,当函数执行完成后再回过头来处理执行结果。通常用于需要耗时的操作,如网络请求、数据库查询等,可以避免阻塞主线程而影响用户体验。 Java异步调用的几种方式 1. 回调函数 回调函数是指在调用函数…

    Java 2023年5月19日
    00
  • Java访问数据库实例详解

    Java访问数据库实例详解 本文将详细讲解如何使用Java语言访问数据库,包括连接数据库、增删改查等基本操作。 连接数据库 Java程序可以通过JDBC(Java Database Connectivity) API来连接数据库,同样也需要使用数据库驱动程序。下面是一个使用MySQL数据库连接的示例代码: import java.sql.Connection…

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