java 定時器quartz使用

定時器使用場景(固定時間程序自動執行部分功能)。

使用步驟

一:配置初始化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+"★★★★★★★★★★★");  
    }   
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章