quartz 定时器
什么是Quartz
Quartz是一个完全由Java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制。Quartz允许开发人员根据时间间隔来调度作业。它实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。
Quartz 核心组件
-
Scheduler:调度容器
-
Job:Job 接口类,即被调度的任务
Job 是一个接口,只有一个方法 void execute(JobExecutionContext context),开发者实现接口来定义任务。JobExecutionContext 类提供了调度上下文的各种信息。Job 运行时的信息保存在 JobDataMap 实例中。
-
JobDetail:Job 的描述类,job执行时的依据此对象的信息反射实例化出Job的具体执行对象
JobDetail绑定指定的Job,每次Scheduler调度执行一个Job的时候,首先会拿到对应的Job,然后创建该Job实例,再去执行Job中的execute()的内容,任务执行结束后,关联的Job对象实例会被释放,且会被JVM GC清除。
-
Trigger:触发器,包括SimpleTrigger和CronTigger
SimpleTrigger:当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择。
CronTrigger:CronTrigger功能非常强大,是基于日历的作业调度,而SimpleTrigger是精准指定间隔,所以相比SimpleTrigger,CroTrigger更加常用。
Cron 表达式格式:[秒] [分] [小时] [日] [月] [周] [年]
-
JobStore:存储作业和调度期间的状态
-
Calendar:指定排除的时间点
Quartz Demo
利用Quartz 搭建一个简单的demo
-
引入依赖jar 包
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency>
-
配置quartz的任务
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-lazy-init="false"> <bean id="AcceptTaskListener" class="com.XXX.base.task.AcceptTaskListener"/> <bean id="saveAccept" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="AcceptTaskListener"/> </property> <property name="targetMethod"> <value>saveAcceptInfo</value> </property> </bean> <bean id="saveAccpet_cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="saveAccept"/> <property name="cronExpression"> <value>0 30 01,07,13 * * ?</value> </property> </bean> <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="statusSynchronize_cronTrigger"/> </list> </property> </bean> </beans>
-
执行任务的具体内容
public class AcceptTaskListener { public void saveAcceptInfo() { ****具体任务逻辑**** } }