前言:
在一些项目中,往往需要定时的去执行一些任务,比如商城项目,每天0点去统计前一天的销量。那么如何实现呢,总不可能我们每天0点手动的去执行统计销量的方法吧,这时就quartz就起作用了。
quartz简介:
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 2.3.0。
以上是百度百科介绍,我们可以简单的理解其为一个定时调度工具(定时器)。
spring整合quartz:
网上也有很多教程,好多都是基于配置方式,我们使用当然怎么简单就怎么用,所以这里介绍基于注解方式整合quartz。前提:你需要有一个能运行的web项目。
1、引依赖:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
注意:网上有的教程说还必须引入spring-context-support
依赖,但是本项目没有引入这个也可以正常使用quartz,可能是最新版不需要这个依赖了。
2、开启quartz的注解:
一般我们都在service层使用quartz,所以在spring-service.xml
中进行如下配置:
<context:component-scan base-package="com.zhu.meilianMall.service" />
<task:annotation-driven/>
注意:第一行扫描包的配置是ssm整合本来就需要的,等下quartz的注解也只能在这个包下使用。
3、使用quartz的注解:
在com.zhu.meilianMall.service
包下创建测试类,在需要定时执行的方法上加上@Scheduled(cron = "cron表达式")
,如下:
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表达式不会写没关系,百度一下“cron表达式在线生成器”,就会有很多,这里也给出一个:在线cron表达式生成器。本案例中是每隔2秒执行一次run方法。
4、测试:
启动tomcat访问项目,然后控制台就打印出run方法的执行结果了。
run方法每隔两秒打印一次,整合成功!
总结:
本人对于quartz并不了解,其功能也不止本案例中提及的。不过与spring整合确实够简单,只需要引依赖、开启注解、使用注解3步即搞定。