Quartz是一个作业任务调度的框架,所在项目组中“消息推送模块”使用到此框架,于是写个demo熟悉下quart的用法;
使用Spring框架来集成Quartz的任务调度任务。
1、搭建Spring框架,Quartz框架
1.1、拷贝Spring框架、Quartz所需要的jar包(quartz.jar);
1.2、在整个项目的web.xml主配置中添加spring的核心配置(监听spring、核心配置)
<context-param> <!--spring核心配置文件--> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-config.xml</param-value> </context-param> <listener> <!--spring的监听--> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
1.2、spring配置文件的创建:spring-config.xml
<beans> <!-- 要调用的工作类 --> <bean id="quartzJob" class="com.fdx.QuartzJob"></bean> <!-- 定义调用对象和调用对象的方法 --> <bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 调用的类 --> <property name="targetObject"><ref bean="quartzJob" /></property> <!-- 调用类中的方法 --> <property name="targetMethod"><value>work</value></property> </bean> <!-- 定义触发时间 --> <bean id="doTime" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="jobtask" /></property> <property name="cronExpression"> <value>0/10 * * * * ?</value> </property><!-- cron表达式 -->
</bean>
<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
<bean id="startQuertz" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers"> <list> <ref bean="doTime" /> </list> </property>
</bean>
</beans>
1.3、工作类
package com.fdx; import java.util.Date; public class QuartzJob { public void work() { System.out.println("Quartz的任务调度!!!"+new Date());
//在控制台会被作为“任务”推送给控制台的语句,隔一段时间会被打印在控制台 } }
1.4、main类【启动整个定时任务的主类】
1 package com.fdx; 2 import org.springframework.context.ApplicationContext; 3 import org.springframework.context.support.ClassPathXmlApplicationContext; 4 public class MainTest { 5 public static void main(String[] args) 6 { 7 System.out.println("Test start."); 8 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 9 //如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化 10 //context.getBean("startQuertz"); 11 System.out.print("Test end.."); 12 } 13 }
1.5、控制台输出的结果如下:
Test start. log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j:WARN Please initialize the log4j system properly. Test end.. Quartz的任务调度!!!Wed Jan 13 15:49:50 CST 2016 Quartz的任务调度!!!Wed Jan 13 15:50:00 CST 2016 Quartz的任务调度!!!Wed Jan 13 15:50:10 CST 2016 Quartz的任务调度!!!Wed Jan 13 15:50:20 CST 2016 Quartz的任务调度!!!Wed Jan 13 15:50:30 CST 2016 Quartz的任务调度!!!Wed Jan 13 15:50:40 CST 2016 Quartz的任务调度!!!Wed Jan 13 15:50:50 CST 2016