Java定时器Quartz

  前段时间,遇到的项目中,需要每隔一定的时间运行某些代码。刚开始想使用timer,后来得知有一种很实用的定时开源工具Quartz,经过摸索,发现Quartz即简单又实用。

  我使用的Quartz版本为:quartz 2.2.0

  使用Quartz的步骤为:

  1. 定义定时任务类:   

package org.lzstone.action  
public class LzstoneTimeTask implements Job{  
       public void execute(JobExecutionContext context) throws JobExecutionException{  
              system.out.println("Quartz.."); 
       }  
} 


2.启动定时任务分为程序直接启动和Web监听两种方式:

 2.1.程序直接启动:

package org.lzstone.action;  
  
import org.quartz.CronTrigger;  
import org.quartz.JobDetail;  
import org.quartz.Scheduler;  
  
public class LzstoneMain{  
       private static Scheduler sched;  
       public static void run() throws Exception{  
              //创建LzstoneTimeTask的定时任务  
              JobDetail jobDetail = new JobDetail("lzstoneJob",sched.DEFAULT_GROUP,LzstoneTimeTask.class);  
              //目标 创建任务计划  
              CronTrigger trigger = new CronTrigger("lzstoneTrigger","lzstone","0 0 12 * * ?");  
              //0 0 12 * * ? 代表每天的中午12点触发  
              sched = new org.quartz.impl.StdSchedulerFactory().getScheduler();  
              sched.scheduleJob(jobDetail,trigger);  
              sched.start();  
       }  
       //停止  
       public static void stop() throws Exception{  
              sched.shutdown();  
        }  
         
       public static void main(String[] args) throws Exception {  
        // TODO Auto-generated method stub  
            
               LzstoneMain.run();  
            
    }  
}  


 此方法会每隔一段时间触发你需要做的任务,但是启动后不会先执行一次,而是等到下一个执行时间点在执行,那么如果我们需要启动的时候就执行一次呢?

@SuppressWarnings("deprecation")
	public static void run() {
		try {
			// 创建LzstoneTimeTask的定时任务
			JobDetail jobDetail = new JobDetailImpl("lzstoneJob", Scheduler.DEFAULT_GROUP, CaptchSenderTask.class);
			// 目标 创建任务计划
			SimpleTrigger trigger = new SimpleTriggerImpl("lzstoneTrigger", null, new Date(), null,
					SimpleTrigger.REPEAT_INDEFINITELY, Long.valueOf(setTime) * 1000L);
			// 0 0 12 * * ? 代表每天的中午12点触发
			sched = new org.quartz.impl.StdSchedulerFactory().getScheduler();
			sched.scheduleJob(jobDetail, trigger);
			sched.start();
		} catch (SchedulerException e) {
			e.printStackTrace();
			logger.error(e.getMessage());
		}
	}



 这样Quartz就会在程序启动时立即执行一次,后面按照设置的时间间隔执行任务。


  2.2.Web监听方式:

package org.lzstone.action;  
  
import javax.ejb.Timer;  
import javax.servlet.ServletContextEvent;  
import javax.servlet.ServletContextListener;  
  
public class LzstoneMainListener implements ServletContextListener{  
       private Timer timer = null;  
       //初始化监听器,创建实例,执行任务  
       public void contextInitialized(ServletContextEvent event){  
               try {  
                LzstoneMain.run();  
            } catch (Exception e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
       }  
       //销毁监听器,停止执行任务  
       public void contextDestroyed(ServletContextEvent event){  
              try {  
                LzstoneMain.stop();  
            } catch (Exception e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
}  

web.xml配置:

<listener>  
   <listener-class>  
        org.lzstone.action.LzstoneMainListener  
   </listener-class>  
</listener> 





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值