一.Quartz框架简介
Quartz是一个开源项目,它可以与j2EE和j2SE结合使用,也可以单独使用。Quartz可以用来创建许多Jobs这样的复杂的程序,并通过cron表达式自定义执行的规则。Quartz的几个核心概念如下:
1.Job:代表一个工作,要执行的内容,此接口只有一个方法execute().
2.JobDetail:代表一个可执行的调度程序,Job是这个可执行调度程序的内容,另外,JobDetail还包含了这个任务调度的方案和策略。
3.Trigger:代表一个调度参数的配置
4.Scheduler:代表一个调度容器,可以注册多个JobDetial和Trigger
5.SchedulerFactory:代表一个调度工厂,用来创建一个scheduler调度器
二.Quartz执行流程
此调度流程体现在Spring就是,Job注入到JobDetial,JobDetial注入到Trigger,Trigger注入到Scheduler中
三.CRON表达式
CRON表达式是用来自定义Quartz执行规则的,在实际使用时可以借助在线工具自动生成。
具体的规则如下:
1.CRON由七个域组成,顺序为:秒 分 时 日 月 周 年,以空格作为分界?
2.特殊字符:
使用星号(*)指示着你想在这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发这个 trigger。
?号只能用在日和周域上,但是不能在这两个域上同时使用,指不为该域指定值
逗号(,)是用来在给某个域上指定一个值列表的。例如,使用值 0,15,30,45在秒域上意味着每15秒触发一个 trigger。
斜杠(/)是用于时间表的递增的。例如 0/15表示每15分钟的递增。
中划线(-)用于指定一个范围。例如,在小时域上的 3-8意味着 "3,4,5,6,7和 8 点
L说明了某域上允许的最后一个值。它仅被日和周域支持
W字符代表着平日 (Mon-Fri),并且仅能用于日域中
#字符仅能用于周域中。它用于指定月份中的第几周的哪一天
由于可以在线生成CRON表达式,故大致了解即可。
四.在Spring配置使用Quartz流程详解
第一步:导入相关依赖
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.3</version>
</dependency>
第二步:自定义创建任务类
public class MyJob {
public void run() {
System.out.println("自定义的作业类执行了:" +
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
}
第三步:在spring配置文件中配置任务类
<bean id="myJob" class="com.cai.quartz.MyJob"></bean>
第四步:在spring配置文件中配置JobDetail
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 注入目标对象 -->
<property name="targetObject" ref="myJob"/>
<!-- 注入目标方法 -->
<property name="targetMethod" value="run"/>
</bean>
第五步:在spring配置文件中配置触发器
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 注入任务详情对象 -->
<property name="jobDetail" ref="jobDetail"/>
<!-- 注入cron表达式,通过这个表达式指定触发的时间点 -->
<property name="cronExpression">
<value>0/2 * * * * ? 2017-2099</value>
</property>
</bean>
第六步:在spring配置文件中配置scheduler
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 注入触发器 -->
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
第七步:加载spring文件,创建spring工厂
public class App {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("applicationContext.xml");
}
经过此七步,自定义一个job,并把其配置到spring配置文件中,即可实现job任务的定时执行。