Java EE学习--Quartz基本用法
新浪博客完全不适合写技术类文章。本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧。很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人。
首先提到的是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基本用法的更多相关文章
- Java EE学习——Quartz的Cron表达式
经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比 ...
- Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Jav ...
- Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理
转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava E ...
- Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库
参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 ...
- Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring
参考:https://my.oschina.net/gaussik/blog/513353 注:此文承接上一文:Java EE 学习(5):IDEA + maven + spring 搭建 web(1 ...
- Java EE 学习(5):IDEA + maven + spring 搭建 web(1)
参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--1590 ...
- Java EE 学习(4):IDEA + maven 搭建 web(2)
参考:http://www.bubuko.com/infodetail-1855067.html 现使用 Maven 创建项目:本节接Java EE 学习(3):IDEA + maven 搭建 web ...
- 【Java EE 学习 74 上】【数据采集系统第六天】【使用Jfreechart的统计图实现】【Jfreechart的基本使用方法】
之前已经实现了数据的采集,现在已经有了基本的数据,下一步就需要使用这些数据实现统计图的绘制了.这里使用Jfreechart实现这些统计图的绘制.首先看一下Jfreechart的基本用法,只有知道了它的 ...
- 【Java EE 学习 80 上】【WebService】
一.WebService概述 什么是WebService,顾名思义,就是基于Web的服务,它使用Http方式接收和响应外部系统的某种请求,从而实现远程调用.WebService实际上就是依据某些标准, ...
随机推荐
- Openwrt 无法上40MHZ带宽
最近有一个纠结的事情是双天线路由没法上40MHZ带宽,怎么改都不成功,其中 在无线高级设置里面打开了40MHZ带宽: 后来在客户端连上之后,在无线的页面一直显示都是20M的带宽.于是我想是不是驱动或者 ...
- 测试技能积木-AWK的简要用法
做测试工作,经常要分析日志,有的时候活儿还很脏很累,比如抽取符合某些pattern的行,重新格式化等等.有的时候,我们需要也创造一些测试用数据文件.基于上述两种原因,在Unix Like 系统上,一些 ...
- 高版本jquery尤其是1.10.2的版本设置input radio设置值的最正确的姿势。
$("input:radio[name="analyshowtype"]").attr("checked",false); $(" ...
- 公司ERP系统重构那些事
记一次会议,我提出插件化的想法,有支持也有反对,其中"系统架构师"表示插件化后的项目没什么意义,今天来讨论项目是否需要插件化的一些观点. 项目背景 公司内部"ERP&qu ...
- 用jQuery.ajaxWebService请求WebMethod,Ajax处理实现局部刷新
首先在aspx.cs文件里建一个公开的静态方法,然后加上WebMethod属性. 如: [WebMethod] public static string GetUserName() { //. ...
- SequoiaDB 系列之四 :架构简析
在本系列的第一篇中,简述了SequoiaDB的安装,以及一个(伪)集群的部署 第二篇和第三篇对SequoiaDB的集群,做了简单地操作. 在本篇中,将对SequoiaDB的架构进行简单的分析. 因为自 ...
- DOM系列---DOM获取尺寸和位置
内容提纲: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本篇我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式. 一.获取元素CSS大小 1.通过style获取 ...
- AngularJS开发指南16:AngularJS构建大型Web应用详解
AngularJS是由Google创建的一种JS框架,使用它可以扩展应用程序中的HTML功能,从而在web应用程序中使用HTML声明动态内容.在该团队工作的软件工程师Brian Ford近日撰写了一篇 ...
- java模板和回调机制学习总结
最近看spring的JDBCTemplete的模板方式调用时,对模板和回调产生了浓厚兴趣,查询了一些资料,做一些总结. 回调函数: 所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个 ...
- abstract和接口
接口只包含常量和抽象方法,不能实例化. abstract: 1.抽象类不能实例化, 2.可以没有抽象方法.但有了抽象方法,一定要被定义为抽象类. 3.子类没有实现父类中所有的抽象方法.子类也必须定义为 ...