1、Quartz介绍web
在企业应用中,咱们常常会碰到时间任务调度的需求,好比天天凌晨生成前天报表,每小时生成一次汇总数据等等。Quartz是出了名的任务调度框架,它能够与J2SE和J2EE应用程序相结合,功能灰常强大,轻轻松松就能与Spring集成,使用方便。spring
2、Quartz中的概念app
主要有三个核心概念:调度器、任务和触发器。三者关系简单来讲就是,调度器负责调度各个任务,到了某个时刻或者过了必定时间,触发器触动了,特定任务便启动执行。概念相对应的类和接口有:框架
1)JobDetail:望文生义就是描述任务的相关状况;测试
2)Trigger:描述出发Job执行的时间触发规则。有SimpleTrigger和CronTrigger两个子类表明两种方式,一种是每隔多少分钟小时执行,则用SimpleTrigger;另外一种是日历相关的重复时间间隔,如天天凌晨,每周星期一运行的话,经过Cron表达式即可定义出复杂的调度方案。url
3)Scheduler:表明一个Quartz的独立运行容器,Trigger和JobDetail要注册到Scheduler中才会生效,也就是让调度器知道有哪些触发器和任务,才能进行按规则进行调度任务。spa
3、Spring中使用Quartzcode
1,所需jar包:quartz.jar,spring.jar,commons-collections-3.2.jar;orm
2,添加业务逻辑类(简单示例):xml
public class UserHeartBeat {
public void Show(){
Calendar cal=Calendar.getInstance();
long date=cal.getTime().getTime(); SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS"); String result=sdf.format(date); System.out.println(result); System.out.println("Spring Quartz Test"); } public static void main(String args[]){ new UserHeartBeat().Show(); }
}
这个类的做用就是用来定义每隔多久要作的事情
3,配置文件(applicationContext.xml) 用来配置定时任务
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 要调用的工做类 --> <bean id="MyJob" class="com.abin.spring.quartz.UserHeartBeat"></bean> <!-- 定义调用对象和调用对象的方法 --> <bean id="JobWork" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 调用的类 --> <property name="targetObject"> <ref bean="MyJob"/> </property> <!-- 调用类中的方法 --> <property name="targetMethod"> <value>Show</value> </property> </bean> <!-- 定义触发时间 --> <bean id="JobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="JobWork"/> </property> <!-- cron表达式 --> <property name="cronExpression"> <value>10,15,20,25,30,35,40,45,50,55 * * * * ?</value> </property> </bean> <bean id="JobSchedule" lazy-init="false" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="JobTrigger"/> </list> </property> </bean>
</beans>
其中间隔时间的配置说明见 定时任务配置的间间隔配置说明
4.在主配置文件web.xml中注册定时任务的配置文件(applicationContext.xml)
<servlet>
<servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/ApplicationContext.xml</param-value> </context-param> 5.定义一个测试类来调用定时任务
public static void main(String[] args) {
System.out.println("Spring Quartz test start..."); ApplicationContext context=new ClassPathXmlApplicationContext("ApplicationContext.xml");
// 若是配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化
System.out.println("Spring Quartz test end..."); }
运行效果
案例下载地址 连接描述