您的位置:首页 > 编程语言 > Java开发

Java任务调度框架Quartz

2012-06-15 17:01 831 查看
最近的项目中应用到了Quartz框架,用下来觉得此框架非常的强大,无论是应用在桌面应用程序或者web程序中,都能够解决一些比较棘手的问题。例如在报表统计中,实时查询在大数据量的情况下速度慢的令人发指,单纯从SQL语句上进行优化仍然无法达到要求,这时候可以考虑设计日报表或者月报表,在凌晨进行统计,这时候就可以用Quartz框架进行此工作。(其实也可以在数据库中应用job做同样的工作,在此不讨论)。

Quartz一些基本概念

Quartz中主要有4个概念:调度器、任务、任务细节和触发器

Scheduler(调度器)是Quartz框架的核心,所有的任务计划都由调度器来进行最终控制,一般来说一个程序中只需要一个调度器,一个调度器中可以管理多个计划任务,每一个计划任务在Quartz中被切分为任务细节+执行计划,我们需要执行的代码通常是放置在JobDetail(任务细节)中执行,而执行计划通常指的是Trigger(触发器),每一对JobDetail+Trigger构成一个完整的计划任务,由调度器来负责执行。

Quartz使用

我使用的版本是2.0.2,要使用Quartz至少应该包括以下的Jar包和配置文件

quartz-all-2.0.2.jar --quartz通用包,包含所有常用quartz功能

log4j-1.2.14.jar --log4j日志

slf4j-api-1.6.1.jar --slf4j api,可以让我们自由使用java自带log,以及log4j包

slf4j-log4j12-1.6.1.jar --slf4j整合log4j

log4j.xml --log4j日志配置文件

quartz.properties --quartz配置文件

上代码:
package quartz;

import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import java.text.ParseException;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;

public class QuartzDemo {
public static void main(String[] args) throws SchedulerException {

StdSchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();

JobDetail job = newJob(MyJob.class)
.withIdentity("job1", Scheduler.DEFAULT_GROUP).build();

try {
Trigger trigger = newTrigger()
.withIdentity("trigger1", Scheduler.DEFAULT_GROUP)
.withSchedule(cronSchedule("* * * * * ?")).build();
scheduler.scheduleJob(job, trigger);
} catch (ParseException e) {
e.printStackTrace();
} catch (SchedulerException e) {
e.printStackTrace();
}

scheduler.start();
}
}


package quartz;

import java.util.Date;

import org.apache.log4j.Logger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job{

Logger logger = Logger.getLogger(MyJob.class);

@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
logger.error(arg0.getJobDetail().getKey() +"调用计划任务在:" + new Date());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: