Springboot 开发之 Quartz 任务调度框架简介

引言

Quartz Scheduler是一个功能丰富的开源作业调度库,它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析:

  • 官网地址:https://www.quartz-scheduler.org/
  • w3cschool 官方文档:https://www.w3cschool.cn/quartz_doc/

一、核心概念

Quartz Scheduler的核心概念主要包括三个部分:

  • Job:表示被调度的任务,需要实现org.quartz.Job接口中的execute方法。
void execute(JobExecutionContext context)
  • JobDetail,用于设置任务的属性,如任务的名称、组名、任务类、任务数据等。
  • Trigger:表示触发器,用于定义任务执行的时间规则。Quartz提供了两种主要的触发器类型:SimpleTriggerCronTriggerSimpleTrigger用于在 特定时间后开始执行,并以一定的重复间隔执行。CronTrigger则基于Cron表达式,提供了更复杂的时间调度能力。
  • Scheduler:调度器,是Quartz框架的心脏,负责基于Trigger设定的时间来执行Job。它管理着所有的Job和Trigger,确保它们能够按照预定的计划执行。

在这里插入图片描述

二、Springboot 集成 quartz

1. 创建一个新的 Spring Boot 项目,添加 Quartz 依赖到 pom.xml 文件中:


<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-quartz</artifactId>
    </dependency>
</dependencies>

2. Quartz 配置

在 Spring Boot 应用中配置 Quartz,主要涉及到配置类和任务的创建。

(1)配置类

创建一个配置类,用于配置 Quartz 的相关属性:

@Configuration
public class QuartzConfig {
    
    @Bean
    public JobStore jobStore(DataSource dataSource) {
        JDBCJobStoreFactoryBean factory = new JDBCJobStoreFactoryBean();
        factory.setDataSource(dataSource);
        factory.setTablePrefix("QRTZ_");
        return factory.getObject();
    }

    @Bean
    public SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {
        SchedulerFactoryBean factory = new SchedulerFactoryBean();
        factory.setJobStore(jobStore(dataSource));
        // 可以设置其他属性,如线程池大小等
        return factory;
    }
    
    // 省略其他配置...
}

(2)任务和触发器

定义一个任务,实现 Job 接口,并创建触发器来触发任务:

@Component
public class MyJob implements Job {
    
    @Override
    public void execute(JobExecutionContext context) {
        // 任务逻辑
        System.out.println("执行任务:" + new Date());
    }
}

创建触发器和作业详情,并注册到调度器:

@Service
public class JobService {

    @Autowired
    private Scheduler scheduler;

    @PostConstruct
    public void init() throws SchedulerException {
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
                .withIdentity("myJob", "group1").build();
        
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("myTrigger", "group1")
                .startNow()
                .withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) // 每10秒执行一次
                .build();
        
        scheduler.scheduleJob(jobDetail, trigger);
    }
}

实战演练
启动 Spring Boot 应用
运行 Spring Boot 应用的主类,应用将启动并初始化 Quartz,开始执行定时任务。

验证任务执行
观察控制台输出,你将看到任务按照预定的计划执行,并打印出执行的时间。

参考文献:

  • https://www.cnblogs.com/muxi0407/p/11969119.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值