关于Quartz作业调度框架的使用入门
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(){ //此处调用 } }