定時器使用場景(固定時間程序自動執行部分功能)。
使用步驟
一:配置初始化bean
<bean class="com.sinotrans.visualizationplatform.InstantiationTracingBeanPostProcessor" />
二:代碼實現
1、QuartzTest,.java
package com.sinotrans.visualizationplatform.test;
import java.text.SimpleDateFormat;
import java.util.Date;
public class QuartzTest {
/** *//**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleDateFormat DateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
Date d = new Date();
String returnstr = DateFormat.format(d);
TestJob job = new TestJob();
String job_name ="11";
try {
System.out.println(returnstr+ "【系統啓動】");
QuartzManager.addJob(job_name,job,"0/2 * * * * ?"); //每2秒鐘執行一次
// QuartzManager.addJob("",null,"0/2 * * * * ?"); //每2秒鐘執行一次
// Thread.sleep(10000);
// System.out.println("【修改時間】");
// QuartzManager.modifyJobTime(job_name,"0/10 * * * * ?");
// Thread.sleep(20000);
// System.out.println("【移除定時】");
// QuartzManager.removeJob(job_name);
// Thread.sleep(10000);
//
// System.out.println("/n【添加定時任務】");
// QuartzManager.addJob(job_name,job,"0/5 * * * * ?");
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、QuartzManager.java
package com.sinotrans.visualizationplatform.test;
import java.text.ParseException;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzManager {
private static SchedulerFactory sf = new StdSchedulerFactory();
private static String JOB_GROUP_NAME = "group1";
private static String TRIGGER_GROUP_NAME = "trigger1";
/** *//**
* 添加一個定時任務,使用默認的任務組名,觸發器名,觸發器組名
* @param jobName 任務名
* @param job 任務
* @param time 時間設置,參考quartz說明文檔
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,TestJob job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler(); // 觸發器
// JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任務名,任務組,任務執行類
JobDetail jobDetail;
try {
jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, Class.forName("com.sinotrans.visualizationplatform.test.TestJob"));
System.out.println("getClass---------------"+job.getClass());
//觸發器
CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);//觸發器名,觸發器組
trigger.setCronExpression(time);//觸發器時間設定
sched.scheduleJob(jobDetail,trigger);
//啓動
if(!sched.isShutdown())
sched.start();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//任務名,任務組,任務執行類
}
/** *//**
* 添加一個定時任務
* @param jobName 任務名
* @param jobGroupName 任務組名
* @param triggerName 觸發器名
* @param triggerGroupName 觸發器組名
* @param job 任務
* @param time 時間設置,參考quartz說明文檔
* @throws SchedulerException
* @throws ParseException
*/
public static void addJob(String jobName,String jobGroupName, String triggerName,String triggerGroupName, Job job,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
JobDetail jobDetail = new JobDetail(jobName, jobGroupName, job.getClass());//任務名,任務組,任務執行類
//觸發器
CronTrigger trigger = new CronTrigger(triggerName, triggerGroupName);//觸發器名,觸發器組
trigger.setCronExpression(time);//觸發器時間設定
sched.scheduleJob(jobDetail,trigger);
if(!sched.isShutdown())
sched.start();
}
/** *//**
* 修改一個任務的觸發時間(使用默認的任務組名,觸發器名,觸發器組名)
* @param jobName
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyJobTime(String jobName,String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(jobName,TRIGGER_GROUP_NAME);
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger;
ct.setCronExpression(time);
sched.resumeTrigger(jobName,TRIGGER_GROUP_NAME);
}
}
/** *//**
* 修改一個任務的觸發時間
* @param triggerName
* @param triggerGroupName
* @param time
* @throws SchedulerException
* @throws ParseException
*/
public static void modifyJobTime(String triggerName,String triggerGroupName,
String time)
throws SchedulerException, ParseException{
Scheduler sched = sf.getScheduler();
Trigger trigger = sched.getTrigger(triggerName,triggerGroupName);
if(trigger != null){
CronTrigger ct = (CronTrigger)trigger;
//修改時間
ct.setCronExpression(time);
//重啓觸發器
sched.resumeTrigger(triggerName,triggerGroupName);
}
}
/** *//**
* 移除一個任務(使用默認的任務組名,觸發器名,觸發器組名)
* @param jobName
* @throws SchedulerException
*/
public static void removeJob(String jobName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止觸發器
sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除觸發器
sched.deleteJob(jobName,JOB_GROUP_NAME);//刪除任務
}
/** *//**
* 移除一個任務
* @param jobName
* @param jobGroupName
* @param triggerName
* @param triggerGroupName
* @throws SchedulerException
*/
public static void removeJob(String jobName,String jobGroupName,
String triggerName,String triggerGroupName)
throws SchedulerException{
Scheduler sched = sf.getScheduler();
sched.pauseTrigger(triggerName,triggerGroupName);//停止觸發器
sched.unscheduleJob(triggerName,triggerGroupName);//移除觸發器
sched.deleteJob(jobName,jobGroupName);//刪除任務
}
}
3、要執行的任務
package com.sinotrans.visualizationplatform.test;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class TestJob implements Job {
SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String returnstr = DateFormat.format(d);
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println(returnstr+"★★★★★★★★★★★");
}
}