SpringBoot整合Quartz方法详解

下面我给您详细讲解“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日

相关文章

  • java读取resource目录下文件的方法示例

    针对“java读取resource目录下文件的方法示例”,我将为你提供完整的攻略。请仔细阅读以下内容。 方法一:使用ClassLoader.getResource() ClassLoader.getResource() 方法可以帮助我们加载 classpath 中的资源,包括在 resource 目录下的文件。下面是一个简单的示例代码: public cla…

    Java 2023年5月20日
    00
  • Java的反射机制—动态调用对象的简单方法

    Java的反射机制—动态调用对象的简单方法 Java反射机制是指程序在运行时可以获取自身的信息,并能够操作类或者对象的属性、方法和构造方法。反射机制可以在运行时动态地获取对象的信息,而不需要事先知道构造函数、方法、属性等信息。在Java中反射机制有很多应用场景,最常见的就是在框架中通过获取类信息动态创建对象实例、调用类的方法等。 具体步骤 使用Java反…

    Java 2023年5月26日
    00
  • Hibernate迫切连接和普通连接的区别实例详解

    Hibernate迫切连接和普通连接的区别实例详解 在使用Hibernate框架进行开发时,连接数据库是必不可少的一项工作。而在连接数据库的过程中,Hibernate支持两种连接方式:迫切连接和普通连接。下面我们就来详细了解这两种连接方式的区别及其使用场景,以及实例说明。 迫切连接 迫切连接又称立即加载,指在查询主对象时,同时将关联对象也加载出来。也就是说,…

    Java 2023年6月15日
    00
  • springboot 使用Spring Boot Actuator监控应用小结

    下面是对“springboot使用SpringBootActuator监控应用小结”的详细讲解,包含完整的攻略和示例。 1. 什么是SpringBootActuator SpringBootActuator是SpringBoot框架下的一个辅助工具,可以帮助开发者更好的管理和监控应用程序的运行情况。通过向应用程序的运行时环境中添加各种监控指标,开发者可以实时…

    Java 2023年5月15日
    00
  • SpringBoot四大神器之Auto onfiguration的使用

    SpringBoot四大神器之AutoConfiguration的使用攻略 什么是AutoConfiguration 在SpringBoot项目中,AutoConfiguration是一个非常重要的组件,可以帮助我们简化大量的配置。可以理解为,SpringBoot通过AutoConfiguration机制自动帮我们完成大量的配置工作。 举个例子,我们需要使用…

    Java 2023年5月19日
    00
  • 基于StringUtils工具类的常用方法介绍(必看篇)

    基于StringUtils工具类的常用方法介绍 StringUtils是Apache Commons Lang组件库中提供的一个字符串工具类,它提供了很多方便的字符串操作方法,大大简化了Java程序中字符串处理的难度。本篇攻略将逐一介绍StringUtils工具类的常用方法,分类讲解它们的使用方法。 1. 字符串判空 1.1 isBlank方法 isBlan…

    Java 2023年5月27日
    00
  • JDK9对String字符串的新一轮优化

    本次讲解将从以下几个方面详细讲解JDK9对String字符串的新一轮优化: 1.记录String字符串的byte数组2.String字符串的实现方式升级到Compact String3.使用try-with-resources自动关闭资源4.String的重复操作5.示例说明 1. 记录String字符串的byte数组 在JDK9中,String字符串可以记…

    Java 2023年5月27日
    00
  • JDBC数据库连接过程及驱动加载与设计模式详解

    下面是对于“JDBC数据库连接过程及驱动加载与设计模式详解”的完整攻略: JDBC数据库连接过程 JDBC是JavaEE标准中定义的用于操作各种关系型数据库的API。使用JDBC连接到数据库的过程如下: 加载数据库驱动:使用Class.forName(driver)加载对应数据库的驱动类,其中driver是JDBC提供的数据库驱动类名。例如,连接MySQL数…

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