新浪博客完全不适合写技术类文章。本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧。很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人。
首先提到的是Quartz,一个开源的定期执行计划任务的框架。其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇。心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了。
第一步:下载Quartz包:
Quartz的最新版本可以上官网上下载,网址:http://www.quartz-scheduler.org/downloads。下载最新版的就好,经过测试Java 1.6和1.7都是可以支持的。
下载完毕后,解压缩。后缀.tar.gz在Linux下用tar -zxvf,在windows下随便一个解压缩的软件都行,这里不再详述。
第二步:创建Quartz工程:
以Eclipse为例,创建一个普通的Java工程,然后在Build Path中,导入Quartz目录下/lib/下除了c3p0以外所有Jar包。
Quartz的原理大概是:按照时间计划,定期执行目标类的execute方法(通过反射,所以目标类需要实现接口)
接着开始编写Java代码,我们先写一个类,实现org.quartz.Job接口,重写execute方法(有点像struts2?)代码如下:
public class MyJob implements Job { @Override public void execute(JobExecutionContext ctx) throws JobExecutionException { //在这里编写要执行的计划任务,这里为了简单起见,写了一行打印语句 //实际可能是数据库的CRUD操作,或者定时对操作系统环境进行优化,等等 System.out.println("Now It‘s My Running Time"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("Job Time is:"+format.format(new Date())); } }
接着,我们需要对这个任务进行调度。在哪里编写调度代码呢?先从最简单的main方式说明吧,新建一个类,在main方法中:
public static void main(String[] args) throws Exception { //创建scheduler工厂类,并生成scheduler对象 SchedulerFactory factory = new StdSchedulerFactory(); Scheduler sche = factory.getScheduler(); //先输出当前时间 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(format.format(new Date())); //何时执行这个计划?需要先生成一个Date对象,表示计划要执行的时间 //DateBuilder是Quartz提供的类,evenMinuteDateAfterNow是从现在起下一分钟 Date runTime = DateBuilder.evenMinuteDateAfterNow(); //分别创建JobDetail和Trigger对象,方式类似,都是静态构造,XXXBuilder.newXXX().build() JobDetail job = JobBuilder.newJob(MyJob.class).build(); Trigger trigger = TriggerBuilder.newTrigger().startAt(runTime).build(); //把任务和触发器加到scheduler中 sche.scheduleJob(job, trigger); //开始任务 sche.start(); //此时Quartz应该是另起线程去获取时间了,所以应该在主线程等待一段时间,等计划任务执行完毕 //要不然main方法一结束,Quartz也就不运行了。 Thread.sleep(60*1000); sche.shutdown(); }
运行完毕后,Console显示类似如下结果:
2014-08-01 22:10:15 Now It‘s My Running Time Job Time is:2014-08-01 22:11:00
确实是按照预期目标运行的,Quartz就是这么简单!
Java EE学习--Quartz基本用法,布布扣,bubuko.com