强烈建议用Springboot-2.x,比起 1.x,很多插件的配置方式都简单了太多!
引入 Quartz 包:
<!-- 定时任务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
仅需1个配置文件(application.properties):
# ########## 数据库连接池(默认集成HikariCP,无需配置)
# 数据库驱动类
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
# ########## Quartz 定时任务
spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.scheduler.instanceName=clusteredScheduler
spring.quartz.properties.org.quartz.scheduler.instanceId=AUTO
spring.quartz.properties.org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
spring.quartz.properties.org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
spring.quartz.properties.org.quartz.jobStore.tablePrefix=qz2_
spring.quartz.properties.org.quartz.jobStore.isClustered=true
spring.quartz.properties.org.quartz.jobStore.clusterCheckinInterval=10000
spring.quartz.properties.org.quartz.jobStore.useProperties=false
spring.quartz.properties.org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
spring.quartz.properties.org.quartz.threadPool.threadCount=20
spring.quartz.properties.org.quartz.threadPool.threadPriority=5
spring.quartz.properties.org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
说明:Quartz的相关配置,只需要上面这些就行了,不再需要单独的quartz.properties文件!
后台配置类(可选),将Quartz工厂类作为接口类使用,方便实现多任务:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
// @PersistJobDataAfterExecution
// @DisallowConcurrentExecution
public interface QuartzBaseJob extends Job {
public void execute(JobExecutionContext context) throws JobExecutionException;
}
有个小坑:Quartz自带的表名实在是奇葩的要死,默认前缀“QRTZ_”,修改时最好不要再超过4个字符(比如:qz2_),因为在Oracle下,表名长度有限制!
测试代码:
说明:Quart本身的表记录,都是用 “job_group+job_name”或“trigger_group+trigger_name” 来获取。
import java.util.Map;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
// @PersistJobDataAfterExecution
@DisallowConcurrentExecution
public class InterfaceJob implements QuartzBaseJob {
private static Logger logger = LoggerFactory.getLogger(InterfaceJob.class);
@Autowired
SchedulerService schedulerService;
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
Trigger trigger1 = context.getTrigger();
TriggerKey triggerKey = trigger1.getKey();
OasScheduler dto = new OasScheduler();
dto.setScJobGroup(triggerKey.getGroup());
dto.setScJobName(triggerKey.getName());
// ....
}
}
本文介绍了如何在Springboot 2.x项目中配置和使用Quartz 2.x,强调了相比1.x版本的简化配置,并提供了配置文件示例、后台配置类以及测试代码。注意Quartz默认表名前缀问题,建议在Oracle等数据库中适当调整以避免表名长度限制。

278

被折叠的 条评论
为什么被折叠?



