Springboot-2.x + Quartz-2.x 配置示例

本文介绍了如何在Springboot 2.x项目中配置和使用Quartz 2.x,强调了相比1.x版本的简化配置,并提供了配置文件示例、后台配置类以及测试代码。注意Quartz默认表名前缀问题,建议在Oracle等数据库中适当调整以避免表名长度限制。

强烈建议用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());

        // ....
    } 

}

相关链接:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/htmlsingle/#common-application-properties

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值