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..."); }
運行效果
案例下載地址 連接描述