quartz
1.体系结构(三大元素)
Job/JobDetail任务
Trigger触发器 SimpleTrigger/CornTrigger
scheduler调度器 start stop pause resume
一个Trigger只能由1个job,但一个job可以有多个触发器。
2.主要组件
Scheduler 调度程序-任务执行计划表
创建方式:默认使用StdSchedulerFactory创建
Job 任务类 实现job接口的execute方法
默认每次调用job都会创建新的JobDataMap,即无状态的job。可以添加
@PersistJobDataAfterException注解,实现JobDataMap的持久化,保存上一次的执行结果。
JobDetail 任务的实例,通过JobBuilder创建,可以通过getJobDataMap获取特定实例的状态信息。
JobDataMap job实例执行时,可以使用其中的数据
Trigger触发器 定义触发条件 如cron表达式,间隔时间等。常用的包括SimpleTrigger/CornTrigger.
startDate任务第一次开始时间,endDate任务结束时间
JobBuilder 用于创建任务实例
TriggerBuilder 用于创建触发器实例
JobListener、TriggerListener、SchedulerListener 监听器,监听相应的组件。
3.监听器
监听器主要有JobListener、TriggerListener、SchedulerListener三种。也可分为全局监听器和非全局监听器。
全局监听器能接收到所有的Job/Trigger的事件通知,非全局监听器只能接收到在其上注册的job或trigger的事件通知。
api
4.集群配置
1)添加垃圾回收插件,防止quartz内存泄漏
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
2)配置spring
<bean id="schedulerFactoryBean"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >
<property name="dataSource" ref="dataSource"/> <!-- 指定集群数据存储 -->
<property name="startupDelay" value="180"/> <!-- 延迟3分钟执行定时任务,防止启动卡死 -->
<property name="configLocation" value="classpath:quartz.properties" />
</bean>
3)quartz配置
org.quartz.scheduler.instanceName = Mscheduler #调度器名
org.quartz.scheduler.instanceId = AUTO #每台实例ID,AUTO自动生成即可
org.quartz.jobStore.clusterCheckinInterval=20000 #检查间隔
#============================================================================
\# Configure ThreadPool
#============================================================================
#org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
#============================================================================
\# Configure JobStore
#============================================================================
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 = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = true
#同时可以处理的未按时调用的JOB数量
org.quartz.jobStore.maxMisfiresToHandleAtATime=5
来源:oschina
链接:https://my.oschina.net/dajianguo/blog/3162631