下面我给您详细讲解“SpringBoot整合Quartz方法详解”的完整攻略。
一、简介
Quartz是一个任务调度框架,它能够让我们实现定时任务的调度,SpringBoot与Quartz的整合,可以让我们更加方便地实现定时任务的管理和调度。本篇文章将详细介绍SpringBoot如何整合Quartz框架。
二、准备工作
在开始整合之前,我们需要准备以下工作:
- JDK 1.8或以上
- Maven项目管理工具
- Eclipse或IntelliJ IDEA等Java开发工具
- SpringBoot及相关依赖(本文以2.3.0.RELEASE版本为例)
- 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技术站