Quartz定时器

Quartz定时器

package quartz;


import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;

import java.text.SimpleDateFormat;
import java.util.Date;


import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;




/**
 * job 作业配置
 * @author Administrator
 *
 */
public class CronTriggerCfg {
	
	public void run() throws Exception {
		Logger log =  LoggerFactory.getLogger(CronTriggerCfg.class);
		//System.out.println("------- Initializing -------------------");
		log.info("------- Initializing -------------------");


		SchedulerFactory sf = new StdSchedulerFactory();
		Scheduler sched = sf.getScheduler();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
		
		log.info("------- 添加定时作业;每50秒执行一次  -------------------");
		JobDetail job = newJob(DocUnfiledJob.class).withIdentity("job1", "group1").build();
		CronTrigger trigger = newTrigger().withIdentity("trigger1", "group1")
				.withSchedule(cronSchedule("0/50 * * * * ?")).build();
		Date ft = sched.scheduleJob(job, trigger);
		//System.out.println(job.getKey() + ">>>从: " + sdf.format(ft) + "开始执行 and repeat based on expression: "
			//	+ trigger.getCronExpression());
		log.info(job.getKey() + ">>>从: " + sdf.format(ft) + "开始执行 and repeat based on expression: "
				+ trigger.getCronExpression());
		
		
		
		sched.start();
	}


	public static void main(String[] args) throws Exception {
		CronTriggerCfg example = new CronTriggerCfg();
		example.run();
	}
}

  • Scheduler:调度器。所有的调度都是由它控制。
  • Trigger: 定义触发的条件。例子中,它的类型是SimpleTrigger,每隔1秒中执行一次(什么是SimpleTrigger下面会有详述)。
  • JobDetail & Job: JobDetail 定义的是任务数据,而真正的执行逻辑是在Job中,例子中是HelloQuartz。 为什么设计成JobDetail + Job,不直接使用Job?这是因为任务是有可能并发执行,如果Scheduler直接使用Job,就会存在对同一个Job实例并发访问的问题。而JobDetail & Job 方式,sheduler每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题
Job实现类:
package quartz;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class MyJob implements Job{
	
	Logger _log =  LoggerFactory.getLogger(MyJob.class);
	
	public MyJob(){
		
	}
	
	public void execute(JobExecutionContext context)
	        throws JobExecutionException {
	    	JobKey jobKey = context.getJobDetail().getKey();
	    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	    	
	    	
	    	_log.info("-------------------------作业开始: " + jobKey + " executing at " + sdf.format(new Date()));
	    	
	    	new Start().runDocUnfiled();//业务处理类
	    	
	    	_log.info("+++++++++++++++++++++++++作业结束: " + jobKey + " executing at " + sdf.format(new Date()));
	    }
	
}

业务处理:

package quartz;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 业务处理类
 * 
 * @author Administrator
 *
 */
public class Start {
	
	Logger log = LoggerFactory.getLogger(Start.class);
	
	public void runUnfiled() {
		log.info("-----业务开始------------");
		System.out.println("业务处理");
		log.info("--------业务结束-------");
	}
}


项目中需要jar如下:下载地址

log4j-1.2.16.jar

quartz-2.2.3.jar

quartz-jobs-2.2.3.jar

slf4j-api-1.7.7.jar

slf4j-log4j12-1.7.7.jar

猜你喜欢

转载自blog.csdn.net/h985161183/article/details/80237897