前言:
在一些項(xiàng)目中,往往需要定時(shí)的去執(zhí)行一些任務(wù),比如商城項(xiàng)目,每天0點(diǎn)去統(tǒng)計(jì)前一天的銷量。那么如何實(shí)現(xiàn)呢,總不可能我們每天0點(diǎn)手動的去執(zhí)行統(tǒng)計(jì)銷量的方法吧,這時(shí)就quartz就起作用了。
歡迎大家關(guān)注我的公眾號 javawebkf,目前正在慢慢地將簡書文章搬到公眾號,以后簡書和公眾號文章將同步更新,且簡書上的付費(fèi)文章在公眾號上將免費(fèi)。
quartz簡介:
Quartz是OpenSymphony開源組織在Job scheduling領(lǐng)域又一個(gè)開源項(xiàng)目,它可以與J2EE與J2SE應(yīng)用程序相結(jié)合也可以單獨(dú)使用。Quartz可以用來創(chuàng)建簡單或?yàn)檫\(yùn)行十個(gè),百個(gè),甚至是好幾萬個(gè)Jobs這樣復(fù)雜的程序。Jobs可以做成標(biāo)準(zhǔn)的Java組件或 EJBs。Quartz的最新版本為Quartz 2.3.0。
以上是百度百科介紹,我們可以簡單的理解其為一個(gè)定時(shí)調(diào)度工具(定時(shí)器)。
spring整合quartz:
網(wǎng)上也有很多教程,好多都是基于配置方式,我們使用當(dāng)然怎么簡單就怎么用,所以這里介紹基于注解方式整合quartz。前提:你需要有一個(gè)能運(yùn)行的web項(xiàng)目。
1、引依賴:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
注意:網(wǎng)上有的教程說還必須引入spring-context-support依賴,但是本項(xiàng)目沒有引入這個(gè)也可以正常使用quartz,可能是最新版不需要這個(gè)依賴了。
2、開啟quartz的注解:
一般我們都在service層使用quartz,所以在spring-service.xml中進(jìn)行如下配置:
<context:component-scan base-package="com.zhu.meilianMall.service" />
<task:annotation-driven/>
注意:第一行掃描包的配置是ssm整合本來就需要的,等下quartz的注解也只能在這個(gè)包下使用。
3、使用quartz的注解:
在com.zhu.meilianMall.service包下創(chuàng)建測試類,在需要定時(shí)執(zhí)行的方法上加上@Scheduled(cron = "cron表達(dá)式"),如下:
package com.zhu.meilianMall.service;
import java.util.Date;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
/**
* 測試quartz
* @author zhu
*
*/
@Service
public class QuartzTest {
@Scheduled(cron = "0/2 * * * * ?")
public void run() {
System.out.println("############### quartz整合成功! "+new Date()+"#####################");
}
}
注意:既然是在service層測試,測試類不要忘了加@Service注解;cron表達(dá)式不會寫沒關(guān)系,百度一下“cron表達(dá)式在線生成器”,就會有很多,這里也給出一個(gè):在線cron表達(dá)式生成器。本案例中是每隔2秒執(zhí)行一次run方法。
4、測試:
啟動tomcat訪問項(xiàng)目,然后控制臺就打印出run方法的執(zhí)行結(jié)果了。

run方法每隔兩秒打印一次,整合成功!
總結(jié):
本人對于quartz并不了解,其功能也不止本案例中提及的。不過與spring整合確實(shí)夠簡單,只需要引依賴、開啟注解、使用注解3步即搞定。