Quartz与SpringBoot集成

Quartz是OpenSymphony开源组织的任务管理系统,可与J2EE、J2SE应用结合或单独使用,能创建简单或复杂定时程序。博客介绍了Quartz框架核心对象,并给出两种实现定时程序的方法,包含引入依赖包、自定义任务类、配置类等步骤,还提供代码git地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        Quartz是OpenSymphony开源组织在Job scheduling领域的有一个开源项目,是一个任务管理系统,可以与J2EE、J2SE应用程序结合,也可以单独使用,Quartz不仅可以用来创建简单的定时程序,还可以创建可运行成百上千甚至上万个Job的复杂定时程序。

        Quartz框架的核心对象如下:

直接上代码:

方法一:

1、引入依赖包:

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

2、自定义任务类:

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.stereotype.Component;

/**
 * @Description:
 * @Author devin.jiang
 * @CreateDate 2019/5/19 20:22
 */
@Configuration
@Component
@EnableScheduling
public class HelloTask {

    public void sayHello() {
        System.out.println("hello word");
    }

}

3、配置类


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

/**
 * @Description: 配置Quartz的Scheduler调度器
 * @Author devin.jiang
 * @CreateDate 2019/5/19 20:10
 */
@Configuration
public class QuartzConfigure {

    /**
     * 使用MethodInvokingJobDetailFactoryBean进行配置,自定义任务不需要实现Job接口
     * @param helloTask
     * @return
     */
    @Bean(name = "jobDetail")
    public MethodInvokingJobDetailFactoryBean detailFactoryBean(HelloTask helloTask) {

        MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();
        //是否并发执行
        jobDetailFactoryBean.setConcurrent(false);
        //设置需要执行的实体类对应的对象
        jobDetailFactoryBean.setTargetObject(helloTask);
        //设置需要执行的方法
        jobDetailFactoryBean.setTargetMethod("sayHello");

        return jobDetailFactoryBean;

    }

    /**
     * 配置储发器
     * @param jobDetailFactoryBean
     * @return
     */
    @Bean(name = "cronJobTrigger")
    public CronTriggerFactoryBean cronJobTrigger(MethodInvokingJobDetailFactoryBean jobDetailFactoryBean) {

        CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
        triggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());
        //设置cron表达式,10秒钟执行一次
        triggerFactoryBean.setCronExpression("*/10 * * * * ?");

        return triggerFactoryBean;

    }

    /**
     * 配置Scheduler
     * @param cronJobTrigger
     * @return
     */
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactoryBean(Trigger cronJobTrigger) {

        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        //用于Quartz集群,QuartzScheduler启动时会更新已存在的Job
        schedulerFactoryBean.setOverwriteExistingJobs(true);
        //延时启动,应用启动1秒后
        schedulerFactoryBean.setStartupDelay(1);
        //注册触发器
        schedulerFactoryBean.setTriggers(cronJobTrigger);

        return schedulerFactoryBean;

    }

}

4、运行截图:

方法二:

1、引入依赖包,如方法一第一步

2、自定义任务类:


import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.stereotype.Component;

/**
 * @Description: 自定义任务类,通过注解实现
 * @Author devin.jiang
 * @CreateDate 2019/5/19 20:08
 */
@Component
public class HelloJob implements Job {

    private String name;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        JobDataMap jdm = jobExecutionContext.getJobDetail().getJobDataMap();
        name = jdm.getString("name");

        System.out.println("hello: " + name);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3、配置类:


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

/**
 * @Description: 配置Quartz的Scheduler调度器
 * @Author devin.jiang
 * @CreateDate 2019/5/19 20:10
 */
@Configuration
public class QuartzJobConfigure {

    /**
     * 使用JobDetailFactoryBean进行配置,自定义任务需要实现Job接口
     * @param helloJob
     * @return
     */
    @Bean("jobDetail")
    public JobDetailFactoryBean jobDetailFactoryBean(HelloJob helloJob) {

        JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
        jobDetailFactoryBean.setJobClass(helloJob.getClass());
        jobDetailFactoryBean.setDurability(true);
        //额外参数
        JobDataMap jobDataMap = new JobDataMap();
        jobDataMap.put("name","Quartz");
        jobDetailFactoryBean.setJobDataMap(jobDataMap);

        return jobDetailFactoryBean;

    }

    /**
     * 普通的触发器,此处也可用Cron储发器实现
     * @param jobDetail
     * @return
     */
    @Bean("simpleTrigger")
    public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetail) {

        SimpleTriggerFactoryBean simpleTriggerFactoryBean = new SimpleTriggerFactoryBean();
        simpleTriggerFactoryBean.setJobDetail(jobDetail.getObject());
        simpleTriggerFactoryBean.setStartDelay(0);
        simpleTriggerFactoryBean.setRepeatInterval(1000);

        return simpleTriggerFactoryBean;

    }

    /**
     * 配置调度容器
     * @param simpleTrigger
     * @return
     */
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactoryBean(Trigger simpleTrigger) {

        SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
        //用于Quartz集群,QuartzScheduler启动时会更新已存在的Job
        schedulerFactoryBean.setOverwriteExistingJobs(true);
        //延时启动,应用启动1秒后
        schedulerFactoryBean.setStartupDelay(1);
        //注册触发器
        schedulerFactoryBean.setTriggers(simpleTrigger);

        return schedulerFactoryBean;

    }

}

4、运行截图:

代码git地址:https://github.com/380682174/springBootBuket.git

参考:《可伸缩服务架构》

要在Spring Boot中集成Quartz,你需要引入相关的依赖包。在pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 这将引入Spring Boot的Quartz Starter,它包含了Quartz的必要依赖项和配置。接下来,你可以开始开发Quartz任务。 Quartz的核心概念包括Job(任务)、JobDetail(任务详情)、Trigger(触发器)和Scheduler(调度器)。你可以定义一个Job类来执行具体的任务逻辑,然后创建一个JobDetail对象来描述这个任务的详细信息。Trigger用于定义任务的触发条件,而Scheduler则负责调度任务的执行。 在Spring Boot中,你可以通过注解和配置来定义和配置Quartz任务。你可以在应用程序的配置文件中指定任务的触发条件和执行逻辑。然后,Spring Boot会自动创建和管理Quartz的相关组件。 总结起来,要在Spring Boot中集成Quartz,你需要添加相关的依赖项,并使用注解和配置来定义和配置Quartz任务。这样,你就可以实现定时或周期性执行任务的需求了。 #### 引用[.reference_title] - *1* [QuartzSpringBoot集成](https://blog.youkuaiyun.com/jianghuiyun/article/details/90347915)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [springboot整合quartz](https://blog.youkuaiyun.com/Water_Sky/article/details/110071651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值