Java+Quartz实现定时任务
定时任务vo对象:JobManagerVo
jobName:任务名
jobClass:定时任务处理类
jobType:任务类型,0运行一次 1重复任务 其他立即运行
cronReg:定时器规则
runStatus:状态,0停止,,其他运行中
定时任务实现类定义
public class MyJob implements Job{
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
System.out.println("开启了定时任务");
}
}
启动定时任务启动器:JobRunner
启动定时任务步骤
1. 根据jobClass获取 JobDetail对象
2. 获取调度器 Scheduler
3. 构造触发器CronTrigger
4. 任务和触发器注册到调度器中
Class forName = Class.forName(className);
JobDetail jobDetail = newJob(forName).withIdentity(jobId.toString()).build();
jobDetail.getJobDataMap().put("jobKey", jobId.toString());
CronTrigger cTrigger = newTrigger().withSchedule(cronSchedule(cronReg)).build();
// 添加到调度器
scheduler.scheduleJob(jobDetail, cTrigger);
cronReg:定时器规则
className:定时任务所在类
jobId:定时任务的id
Spring+Quartz实现定时任务
JobRunner实现ServletContextListener监听器
Web.xml配置,启动定时任务启动器监听,启动Scheduler调度器
<!-- marketing 定时任务 -->
<listener>
<listener-class>com.ztesoft.bss.marketing.web.controller.marksystem.job.JobRunner</listener-class>
</listener>
public void contextInitialized(ServletContextEvent arg0) {
try {
sf = new StdSchedulerFactory();
Scheduler scheduler = JobRunner.sf.getScheduler();
JobRunner.scheName = scheduler.getSchedulerName();
scheduler.start(); // 容器启动
logger.info(scheName+"--【定时任务调度器】启动成功");
} catch (Exception e) {
e.printStackTrace();
}
}
日志:
job_log:定时任务日志
job_flow_log:定时任务流水日志
定时器规则说明:
表达式有至少6个(也可能是7个)由空格分隔的时间元素。从左至右,这些元素的定义如下:
1.秒(0–59)
2.分钟(0–59)
3.小时(0–23)
4.月份中的日期(1–31)
5.月份(1–12或JAN–DEC)
6.星期中的日期(1–7或SUN–SAT)
7.年份(1970–2099)
例子:
0 0 10,14,16 * * ?
每天上午10点,下午2点和下午4点
0 0,15,30,45 * 1-10 * ?
每月前10天每隔15分钟
30 0 0 1 1 ? 2012
在2012年1月1日午夜过30秒时
链接:http://blog.knowsky.com/260132.htm