Quartz是一个完全由java编写的开源作业调度框架.
Quartz中三个对象
JobDetail 工作对象,指具体做什么事
Trigger 触发器,指什么时间做事,事情做多少次,侧重做事的频率
Scheduler 定时器对象,关联前两个对象,开启定时任务
比较重要的表达式:
Cron表达式
1)字段取值及字符
字段名 允许的值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日 1-31 , - * ? / L W C
月 1-12 or JAN-DEC , - * /
周几 1-7 or SUN-SAT , - * ? / L C #
年 (可选字段) empty, 1970-2099 , - * /
Day-of-month 和 Day-of-week必须有一个指定为?
"?"字符:表示不确定的值
","字符:指定数个值
"-"字符:指定一个值的范围
"/"字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
Quartz在Maven中和spring一起整合的用法:
第一步先导入坐标:(版本可能不同)
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
第二步:配置一下web.xml文件spring核心监听器和applicationContext.xml文件的配置
<!-- spring配置文件位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- spring核心监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
第三步:
建立一个工作对象类加上@Service("promotionBean"),由Spring管理
第四步:配置 applicationContext.xml
<bean id="promotionJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- ref代表bean -->
<property name="targetObject" ref="promotionBean"></property>
<!-- ref代表的方法名 -->
<property name="targetMethod" value="updateStatus"></property>
</bean>
<bean id="promotionTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="promotionJob" />
<property name="cronExpression" value="* * 20 * * ? 2018"></property>
</bean>
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="promotionTrigger" />
</list>
</property>
</bean>
</beans>
当然spring也有自己的调度框架
1.在applicationContext.xml中加约束
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd
2.配置开启定时任务注解
<task:annotation-driven/>
3.编写具体做事情的类及方法
@Component
public class BosTask {
@Scheduled(cron="*/5 * * * * ?")
public void refresh(){
//此处调用
}
}