Quartz配置详解

Quartz配置详解,第1张

prefix = org.quartz.scheduler

备注:

threadsInheritContextClassLoaderOfInitializer:

指定Quartz生成的线程是否继承初始化线程的上下文类加载器。这会影响Quartz的主调度线程、JDBCJobStore的”熄火”处理线程、集群回复线程和线程池里的线程。 将该值设置为true可以帮助类加载,JNDI查找。

batchTriggerAcquisitionMaxCount:

值越大一次性触发的任务就可以越多,但是在集群环境【非必须】下,不建议设置为很大值。如果值 >1, 并且使用了 JDBC JobStore的话, org.quartz.jobStore.acquireTriggersWithinLock属性必须设置为true,以避免”弄脏”数据

prefix = org.quartz.threadPool

prefix = org.quartz.triggerListener.NAME

全局的触发器监听器

prefix = org.quartz.jobListener.NAME

全局的触发器监听器

prefix = org.quartz.jobStore

对于插件的配置项不是固定的,与配置的quartz插件类型有关

1、去quartz官网下载quartz2.2.2版本的压缩包,quartz下载,注意:quartz2.3.0版本的在docs目录下没有发现dbtable目录(存放生成数据库表的sql文件的目录)。

2、执行创建数据库表的sql文件,我使用的是mysql数据库。

生成的表结构

3、在springboot项目中配置quartz。

3.1、两种方式配置quartz,

3.1.1、第一种是使用自定义的quartz.properties,这是简单配置,如果有其他配置可以参考,quartz.properties配置详情

org.quartz.jobStore.useProperties:true

#org.quartz.scheduler.instanceName: quartzScheduler

#org.quartz.scheduler.instanceId = AUTO

org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool

org.quartz.threadPool.threadCount = 15

org.quartz.threadPool.threadPriority: 5

org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread: true

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX

org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate

org.quartz.jobStore.isClustered = false

#org.quartz.jobStore.clusterCheckinInterval=20000

org.quartz.jobStore.tablePrefix = qrtz_

org.quartz.jobStore.misfireThreshold = 60000

org.quartz.jobStore.maxMisfiresToHandleAtATime = 20

org.quartz.scheduler.rmi.export: false

org.quartz.scheduler.rmi.proxy: false

org.quartz.scheduler.wrapJobExecutionInUserTransaction: false

登录后复制

3.1.2、使用配置文件配置springboot中的SchedulerFactoryBean。

@Configuration

public class SchedulerConfig implements SchedulerFactoryBeanCustomizer {

@Autowired

private DataSource dataSource

@Override

public void customize(SchedulerFactoryBean schedulerFactoryBean) {

schedulerFactoryBean.setStartupDelay(10)

schedulerFactoryBean.setOverwriteExistingJobs(true)

schedulerFactoryBean.setDataSource(dataSource)

ClassPathResource resource = new ClassPathResource("quartz.properties")

Properties properties = new Properties()

InputStream in= null

try {

in = resource.getInputStream()

BufferedReader bf = new BufferedReader(new InputStreamReader(in, "UTF-8"))

properties.load(bf)

schedulerFactoryBean.setQuartzProperties(properties)

} catch (IOException e) {

e.printStackTrace()

}

}

}

登录后复制

3.2.1、第二种方式是在application.properties文件中的配置,application.properties文件中的spring.quartz.properties. 加上quartz.properties中的键值对,效果与quartz.properties类似。

spring.quartz.properties.org.quartz.jobStore.tablePrefix = qrtz_

spring.quartz.properties.org.quartz.threadPool.threadCount = 10

登录后复制

项目中配置org.quartz.jobStore.tablePrefix = qrtz_,这个配置是默认查询数据库中表的前缀,默认是QRTZ_,以下sql中通过rpt方法组装一条新的sql,替换掉{0},{1},如果没有明确声明就会使用默认值 org.quartz.jobStore.tablePrefix = QRTZ_,org.quartz.scheduler.instanceName: quartzScheduler。

如果进行简单的定时任务,可以使用springboot中默认的quartz配置。

3.2.2 自定义配置springboot中的SchedulerFactoryBean。

@Configuration

public class SchedulerConfig implements SchedulerFactoryBeanCustomizer {

@Autowired

private DataSource dataSource

@Override

public void customize(SchedulerFactoryBean schedulerFactoryBean) {

schedulerFactoryBean.setStartupDelay(10)

schedulerFactoryBean.setOverwriteExistingJobs(true)

schedulerFactoryBean.setDataSource(dataSource)

}

}

登录后复制

4、新建Job

public class TestJob implements Job {

@Override

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

System.out.println(System.nanoTime())

}

}

登录后复制

5、数据库中新增job任务脚本,com.example.quartzdemo.job.TestJob是我本地的测试Job,需要修改成你自己Job类。

INSERT INTO `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `JOB_CLASS_NAME`, `IS_DURABLE`, `IS_NONCONCURRENT`, `IS_UPDATE_DATA`, `REQUESTS_RECOVERY`, `JOB_DATA`) VALUES ('quartzScheduler', 'test2Job', 'testGroup', NULL, 'com.example.quartzdemo.job.TestJob', '1', '0', '0', '0', NULL)

INSERT INTO `qrtz_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `JOB_NAME`, `JOB_GROUP`, `DESCRIPTION`, `NEXT_FIRE_TIME`, `PREV_FIRE_TIME`, `PRIORITY`, `TRIGGER_STATE`, `TRIGGER_TYPE`, `START_TIME`, `END_TIME`, `CALENDAR_NAME`, `MISFIRE_INSTR`, `JOB_DATA`) VALUES ('quartzScheduler', 'testTrigger2', 'testTriggerGroup', 'test2Job', 'testGroup', NULL, '1554122914000', '1554122913000', '5', 'ACQUIRED', 'CRON', '1554039857000', '0', NULL, '0', NULL)

INSERT INTO `qrtz_cron_triggers` (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`, `CRON_EXPRESSION`, `TIME_ZONE_ID`) VALUES ('quartzScheduler', 'testTrigger2', 'testTriggerGroup', '0/1 * * * * ?', 'Asia/Shanghai')

登录后复制

6、启动项目,查看控制台打印的日志,成功

quartz不刷新数据库方法如下:

启用quartz的分布式任务调度处理,只需如下两个步骤,同时程序无需修改:

(1)在数据库中创建quartz需要的表。这些表由quartz自己维护,用于保存数据和维护程序运行状态,这些表对于程序员而言是透明的,不需要关注,只需创建好表即可。

(2)在工程的src下增加quartz.properties配置文件,进行集群相关 *** 作的配置。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10835833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存