胖熊熊

得到多少又失去了什么

Quartz使用(一)-入门使用

很久没有用Quartz了,居然忘记如何使用了,这里赶紧记录下
对Quartz就不说明了,直接上代码
注:这里使用的是Quartz1.5.2版本(包:quartz-1.5.2.jar)

简单的任务管理类


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;

/**
 * @Title:Quartz管理类
 * 
 * @Description:
 * 
 * @Copyright: 
 * 
@author zz  2008-10-8 14:19:01
 * 
@version 1.00.000
 *
 
*/

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,Job job,String time) 
                               
throws SchedulerException, ParseException{
       Scheduler sched 
= sf.getScheduler();
       JobDetail jobDetail 
= new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());//任务名,任务组,任务执行类
       
//触发器
       CronTrigger  trigger = 
            
new CronTrigger(jobName, TRIGGER_GROUP_NAME);//触发器名,触发器组
       trigger.setCronExpression(time);//触发器时间设定
       sched.scheduleJob(jobDetail,trigger);
       
//启动
       if(!sched.isShutdown())
          sched.start();
   }

   
   
/**
    * 添加一个定时任务
    * 
@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);//删除任务
   }

}


测试工作类
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class TestJob implements Job {

    
public void execute(JobExecutionContext arg0) throws JobExecutionException {
        
// TODO Auto-generated method stub
        System.out.println("★★★★★★★★★★★");
    }


}

测试类
public class QuartzTest {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        TestJob job = new TestJob();
        String job_name 
="11";
        
try {
            System.out.println(
"【系统启动】");
            QuartzManager.addJob(job_name,job,
"0/5 * * * * ?");
            
            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();
        }

    }

}

posted on 2008-10-08 15:40 fatbear 阅读(14481) 评论(8)  编辑  收藏 所属分类: JAVA

评论

# re: Quartz使用(一)-入门使用 2009-04-15 09:13 lynn169

写的很好,还有一种情况,如果一个任务修改了,怎么办,一定要先删除再重新添加一个任务吗  回复  更多评论   

# re: Quartz使用(一)-入门使用 2009-04-15 16:55 fatbear

@lynn169
要看此任务执行的内容是如何实现的
1.任务执行内容是通过编码实现
这种情况通过类重载后,需要删除再重新添加
2.任务执行内容是通过调用其他实现的(如数据库存储过程或web services服务等)
这种情况是不用删除再重新添加
  回复  更多评论   

# re: Quartz使用(一)-入门使用 2009-04-23 18:00 asd

asda   回复  更多评论   

# re: Quartz使用(一)-入门使用 2009-04-23 18:12 asd

楼主好,
楼主的程序我已试过,在修改时间后,新的时间并没有马上有效,而是要等到在旧的时间触发后才能在新的时间触发任务,我改了一点测试条件:
System.out.println("start time");
QuartzManager.addJob(job_name, job, "0,10,20,30,40,50 * * * * ?");
Thread.sleep(10000);

System.out.println("modify time");
QuartzManager.modifyJobTime(job_name, "5,15,25,35,55,45 * * * * ?");
结果像这样:
start time
$$$Thu Apr 23 18:03:30 CST 2009
modify time
$$$Thu Apr 23 18:03:40 CST 2009 //还是旧的时间规则。
$$$Thu Apr 23 18:03:45 CST 2009
$$$Thu Apr 23 18:03:55 CST 2009
$$$Thu Apr 23 18:04:05 CST 2009

可我想得到像这样的结果:
start time
$$$Thu Apr 23 18:03:30 CST 2009
modify time
$$$Thu Apr 23 18:03:35 CST 2009
//希望新的时间规则能立即生效,如果第35秒已过,希望下次触发事件是第45秒
$$$Thu Apr 23 18:03:45 CST 2009
$$$Thu Apr 23 18:03:55 CST 2009
$$$Thu Apr 23 18:04:05 CST 2009
望楼主赐教,谢谢?这是否是quartz的内部机制?  回复  更多评论   

# re: Quartz使用(一)-入门使用 2009-09-28 17:27 EricLee

哥们,你这个代码,修改时间并没有发生变化呢,我在测试你的代码的时候,同时查看数据库,在修改时间的时候,数据库一直没有改变!!!  回复  更多评论   

# re: Quartz使用(一)-入门使用[未登录] 2010-01-20 17:02 roger

确实,modifyJobTime()方法根本就不起作用  回复  更多评论   

# re: Quartz使用(一)-入门使用[未登录] 2011-09-08 09:57 zy

坑爹  回复  更多评论   

# re: Quartz使用(一)-入门使用 2014-05-17 23:04 zuidaima

java quartz代码下载:http://www.zuidaima.com/share/search.htm?key=quartz  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: