quartz的使用方式

一、导入quartz包

二、增加两个必须的配置文件。

1、quartz.properties  该配置文件被StdSchedulerFactory.java自动加载

org.quartz.scheduler.instanceName = TestScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName =quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = false
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true

   

  2、quartz.xml 该配置文件主要配置任务

<?xml version="1.0" encoding="UTF-8"?>
  <quartz> 

     <!-- 一个月跑一次 -->
     <job> 
          <job-detail> 
              <name>SynchronizeInnoutMapJob</name>             
             <group>job</group>                       
             <job-class>com.ideal.Timer.SynchronizeInnoutMapJob</job-class>
          </job-detail> 
          <trigger> 
             <cron> 
                  <name>t2</name> 
                  <group>job</group> 
                  <job-name>SynchronizeInnoutMapJob</job-name> 
                  <job-group>job</job-group> 
                  <cron-expression>0 0 8 1 * ?</cron-expression> <!--表示问号年,*号月,1日,8点0分0秒执行任务-->                  
            </cron> 
          </trigger> 
     </job>
  </quartz>


3、添加一个监听器,并且在web.xml配置

    
<listener>
<listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class><!--包自带的--></listener>


4.创建实现类 implements org.quartz.Job

public void execute(JobExecutionContext arg0) throws JobExecutionException {
		if (!isRunning) {
			//执行任务}
	}


5.完毕.该定时器会在servlet服务器启动的时候加载

 

附录:手写的加载架包类

package quartz.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;

import com.ideal.longconnection.scheduler.Scheduler;



//此类来自互联网
public class QuartzInitListener implements ServletContextListener {
private static Logger logger = Logger.getLogger(QuartzInitListener.class);
	
	private static int rebootCount = 0;
	
	public void contextDestroyed(ServletContextEvent context) {
		// TODO Auto-generated method stub
		logger.info( " Quartz job destroying start !!! " );
		destroyedQuartz(context);
		logger.info( " Quartz job destroying end !!! " );
		logger.info( " Quartz 定时任务 结束 !!! " );
	}
	
	
	
	public void contextInitialized(ServletContextEvent context)  {
		// TODO Auto-generated method stub
		logger.info( " Quartz job initing start !!! " );
		boolean flag = false;
		try{
			while(rebootCount<10 && !(flag=initQuartz(context))){
				logger.info( " initing failed !!! " );
				Thread.sleep(1000L*10);//启动失败后 10秒重启
				logger.info( " Quartz job reboot --> timeCount="+(++rebootCount) );
			}
		}catch(InterruptedException ie){
			logger.error( " Quartz job initing Exception "+ ie.getMessage());
		}catch(Exception ex){
			logger.error( " Quartz job initing Exception "+ ex.getMessage());
		}
		logger.info( " Quartz job initing "+(flag?"successful":"failed")+" !!! " );
	}
	
	/**
	 * 初始化
	 * @param context
	 * @return
	 */
	public boolean initQuartz(ServletContextEvent context){
		
		boolean flag = false;
		
		try {
			Scheduler scheduler = (Scheduler)context.getServletContext().getAttribute("scheduler");
			
			scheduler = (Scheduler) (scheduler==null?StdSchedulerFactory.getDefaultScheduler():scheduler);
			
//			if(scheduler.i==false){
//				scheduler.start();
//				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//				String[] names = scheduler.getTriggerNames("job");
//				for(int i=0;i<names.length;i++){
//					Trigger t = scheduler.getTriggersOfJob(names[i], "job")[0];
//					System.out.println(t.getName() + " ----- "+sdf.format(t.getNextFireTime()));
//				}
//			}
			context.getServletContext().setAttribute("scheduler", scheduler);
			flag = true;
		} catch (SchedulerException e) {
			logger.error( " Quartz job initing Exception "+ e.getMessage());
		} catch(Exception e){
			logger.error( " Quartz job initing Exception "+ e.getMessage());
		}
		return flag;
		
	}
	
	/**
	 * 终止任务
	 * @param context
	 * @return
	 */
	public boolean destroyedQuartz(ServletContextEvent context){
		boolean flag = false;
		try {
			Scheduler scheduler = (Scheduler)context.getServletContext().getAttribute("scheduler");
			
			scheduler = (Scheduler) (scheduler==null?StdSchedulerFactory.getDefaultScheduler():scheduler);
//			
//			scheduler.
//			if(	scheduler.isStarted()==true){
//				scheduler.shutdown();
//			}
			flag = true;
		} catch (SchedulerException e) {
			// TODO Auto-generated catch block
			logger.error( " Quartz job destroying Exception "+ e.getMessage());
			
		} catch(Exception e){
			logger.error( " Quartz job destroying Exception "+ e.getMessage());
		}
		return flag;
	}


}


 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值