编程爱好者联盟 2016-09-14
睁开眼看一看窗外的阳光,伸一个懒腰,拿起放在床一旁的水白开水,甜甜的味道,晃着尾巴东张西望的猫猫,在窗台上舞蹈。你向生活微笑,生活也向你微笑。
请你不要询问我的未来,这有些可笑。你问我你是不是要找个工作去上班?我告诉你不要,好好享受生活的味道,你所有现在所厌倦的谁说不是别人正羡慕的呢。
;
Quartz ;是 ;OpenSymphony ;开源组织在 ;Job ;scheduling ;领域又一个开源项目,它可以与 ;J2EE ;与 ;J2SE ;应用程序相结合也可以单独使用。Quartz ;是一个完全由 ;Java ;编写的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能,但就其简易形式看,你会发现它易用得简直让人受不了! ;摘自百度百科
其实,他还是没有解释明白,我简单说一下:Quartz ;作业调度就是可以实现定时任务。它可以实现类似 ;Windows ;的任务计划、我们 ;.Net ;下的 ;Windows ;服务实现的定时任务等,而且,它与 ;Spring ;框架结合起来用起来简单到爆,爽的受不了,除了时间设置比较晦涩一点... ;这不重要,待会儿告诉你解决方案。
现在有一个需求:用户在我们系统完成某个操作,我们用金币回馈用户,不过不是即时充值给用户,考虑性能问题,我们用异步或者我们打算在凌晨一点统一充值到用户账户,因为这个时间段用户比较少。你会怎么做?
;
一、新增一个GoldQuartz.java文件 ;当然你可以和我一样,新增一个<code>cn.mayongfa.quartz</code> ;Package ;包,专门用来放执行定时任务的类。 ;这个类的目的是用来定时自动给用户加金币的。
;<pre>@Component
public ;class ;GlodQuartz ;{
; ; ; ;/**
; ; ; ; ;* ;用户自动加金币
; ; ; ; ;* ;每天凌晨一点执行一次
; ; ; ; ;*/
; ; ; ;@Scheduled(cron ;= ;"0 ;0 ;1 ;* ;* ;? ;")
; ; ; ;public ;void ;addUserGold() ;{
; ; ; ; ; ; ; ;System.out.println("凌晨一点了,你睡了么?");
; ; ; ;}
; ; ; ;/**
; ; ; ; ;* ;每隔5秒定时清理缓存
; ; ; ; ;*/
; ; ; ;@Scheduled(cron ;= ;"*/5 ;* ;* ;* ;* ;? ;")
; ; ; ;public ;void ;cacheClear() ;{
; ; ; ; ; ; ; ;System.out.println("时间又过去5秒了,真令人伤感...");
; ; ; ;}
}</pre> ;
就完成了?嗯,是的,就这么简单。主要涉及到<code>@Scheduled</code>的<code>cron</code>是什么意思,下面会讲怎么写和怎么自动生成,因为现在这样你完全看不明白。
二、配置springMVC-servlet.xml文件
;<pre> ; ; ; ;<!-- ;扫描定时作业调度包 ;-->
; ; ; ;<task:annotation-driven ;/>
; ; ; ;<context:component-scan ;base-package="cn.mayongfa.quartz"/></pre> ;
到这其实就这么简单就完成了!好用的受不了。配置这个<code><task:annotation-driven ;/></code>有一个前提是你的 ;xml ;文件的<code>beans</code>声明中要有:
;<pre>xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
; ;http://www.springframework.org/schema/task ;
; ;http://www.springframework.org/schema/task/spring-task.xsd"</pre> ;
配置完整版请点击 ;https://github.com/mafly/SpringDemo/blob/master/WebContent/WEB-INF/springMVC-servlet.xml ;查看。
;
到这里你就可以根据自己的需求去完成自己想要执行的定时任务了。那我就来仔细讲讲@Scheduled的cron是什么意思? ;Cron ;表达式包括以下 ;7 ;个字段:秒、分、小时、月内日期、月、周内日期、年(可选字段)。
Cron ;触发器还利用一系列特殊字符:
;
有些人为了方便大家快速写出 ;cron ;表达式,他做了一个生成表达式的网站:http://www.jeasyuicn.com/cron/ ;你去这个网站,可以非常快速的生成一个合适你的 ;cron ;表达式,快去试试吧。
;
当你需要定时执行一些代码的时候,你就可以用到作业调度了,Quartz ;就是为这个而生的,而且它和 ;Spring ;结合起来非常方便。让你代码写的飞快,Quartz ;还是前几天我们项目组一个同事告诉我的,我使用了一下,我就被他折服了。 ;上面的代码都可以访问 ;Github ;去查看完整的项目示例: ;https://github.com/mafly/SpringDemo/