赞
踩
接上一篇SpringBoot依赖之Quartz Scheduler定时调度器
。
本篇将在 Spring Boot 项目中,使用 Quartz Scheduler 结合 MySQL 数据库来存储 Job。
SpringBoot依赖之Quartz Scheduler定时调度器
在 Dependencies 中选择以下内容:
Spring Web
Spring Data JPA
MySQL Driver
Quartz
在 application.properties
中配置你的 MySQL 数据库连接信息。
application.properties
spring.application.name=quartz-scheduler-mysql
spring.datasource.url=jdbc:mysql://localhost:3306/springboot-quartz?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
创建一个配置类来配置 Quartz,并指定使用数据库作为 Job 存储。
package com.dependencies.quartzschedulermysql.config; import org.quartz.spi.JobFactory; import org.quartz.spi.TriggerFiredBundle; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.quartz.SchedulerFactoryBean; import org.springframework.scheduling.quartz.SpringBeanJobFactory; import javax.sql.DataSource; /** * @author zhizhou 2024/8/7 23:20 */ @Configuration public class QuartzConfig { @Autowired private DataSource dataSource; @Bean public JobFactory jobFactory() { SpringBeanJobFactory jobFactory = new SpringBeanJobFactory() { @Override protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { return super.createJobInstance(bundle); } }; return jobFactory; } @Bean public SchedulerFactoryBean schedulerFactoryBean(JobFactory jobFactory) { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setDataSource(dataSource); schedulerFactoryBean.setJobFactory(jobFactory); schedulerFactoryBean.setOverwriteExistingJobs(true); schedulerFactoryBean.setAutoStartup(true); return schedulerFactoryBean; } }
创建一个 Job 类来定义你的任务逻辑。
package com.dependencies.quartzschedulermysql.jobs; import org.quartz.Job; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.stereotype.Component; import java.time.LocalDateTime; /** * @author zhizhou 2024/8/7 23:21 */ @Component public class SampleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { System.out.println("Executing Job at " + LocalDateTime.now()); } }
创建一个类来调度你的 Job。
package com.dependencies.quartzschedulermysql.scheduler; import com.dependencies.quartzschedulermysql.jobs.SampleJob; import jakarta.annotation.PostConstruct; import org.quartz.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @author zhizhou 2024/8/7 23:23 */ @Configuration public class JobScheduler { @Autowired private Scheduler scheduler; @PostConstruct public void scheduleJob() throws SchedulerException { JobDetail jobDetail = JobBuilder.newJob(SampleJob.class) .withIdentity("sampleJob") .storeDurably() .build(); Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("sampleTrigger") .forJob(jobDetail) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10) .repeatForever()) .build(); scheduler.scheduleJob(jobDetail, trigger); } }
Quartz Scheduler 需要一些表来存储 Job 和 Trigger 的信息。需要在 MySQL 数据库中创建这些表。Quartz 提供了 SQL 脚本来创建这些表。
现在,启动你的 Spring Boot 应用程序。Quartz Scheduler 将使用 MySQL 数据库存储 Job,并按照调度器的配置执行任务。
通过这些步骤,我们就可以在 Spring Boot 项目中使用 Quartz Scheduler 和 MySQL 数据库来存储和调度 Job。核心目的是为了定时调度任务的可观测性,已操作性。后期再加上可视化操作界面,就可以很优雅的解决任务模糊、不好统计的痛点。
加油,程序员们!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。