quartz学习笔记1

 

添加pom.xml

		<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz-jobs -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.3</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.3</version>
		</dependency>
		<!-- commons-logging -->
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>

建立任务类:

package com.test.quartz.jobs;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HelloJob implements Job{
	private static Log log = LogFactory.getLog(HelloJob.class);
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		log.info("This is HelloJob类的任务,在execute这个方法中。。。");
		log.info("do it ......");
		log.info("任务做完!");
	}
}

使用simpleTrigger做的测试类

package com.test.quartz;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.test.quartz.jobs.HelloJob;

public class SimpleTriggerTest {
	public static void main(String[] args) throws SchedulerException {
		JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("jobsName1", "jobsGroup1").build();
		Trigger trigger = TriggerBuilder.newTrigger().withIdentity("triggerName", "triggerGroup1").withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever()).build();
		Scheduler scheduler = new StdSchedulerFactory().getScheduler();
		scheduler.start();
		scheduler.scheduleJob(jobDetail, trigger);
	}
}

这就是quartz使用simpletrigger的基本使用。

quartz除了simpletrigger还有crontrigger这种方式,使用如下:

package com.test.quartz;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.test.quartz.jobs.HelloJob;
import com.test.quartz.listener.HelloJobListener;

public class CronTriggerTest {
	private static Log log = LogFactory.getLog(CronTriggerTest.class);	
	public static void main(String[] args) throws Exception {	
		JobDetail jobDetail = JobBuilder.newJob(HelloJob.class).withIdentity("jobsName1", "jobsGroup1").build();
		Trigger trigger = TriggerBuilder.newTrigger().withIdentity("triggerName", "triggerGroup1").withSchedule(CronScheduleBuilder.cronSchedule("0/1 * * * * ?")).build();
		Scheduler scheduler = new StdSchedulerFactory().getScheduler();
		//scheduler.getListenerManager().addJobListener(new HelloJobListener());
        // 这里是添加listener的,有jobListener还有triggerListener还有schedulerListener其作用如他们一名称一样
		scheduler.start();
		scheduler.scheduleJob(jobDetail, trigger);
	}
}

使用quartz的Listener,quartz的listener分为jobListener,tirggerListener和schedulerListener。

这里来个jobListener的例子:

package com.test.quartz.listener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobListener;

public class HelloJobListener implements JobListener {
	
	private static Log log = LogFactory.getLog(HelloJobListener.class);

	@Override
	public String getName() {
		// TODO Auto-generated method stub
		return "HelloJobListener";
	}

	@Override
	public void jobToBeExecuted(JobExecutionContext context) {
		String jobName = context.getJobDetail().getKey().toString();
		log.info("jobToBeExecuted");
		log.info("Job : " + jobName + " is going to start...");
		
	}

	@Override
	public void jobExecutionVetoed(JobExecutionContext context) {
		log.info("jobExecutionVetoed");
	}

	@Override
	public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
		log.info("jobWasExecuted");
		 
		String jobName = context.getJobDetail().getKey().toString();
		log.info("Job : " + jobName + " is finished...");
 
		if (!jobException.getMessage().equals("")) {
			log.info("Exception thrown by: " + jobName + " Exception: " + jobException.getMessage());
		}
		
	}

}

分别是任务之前,任务完成后,和任务取消完成的方法。

 

多任务

一个Trigger只能对应一个JobDetail(具体的任务)

package com.test.quartz.jobs;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobA implements Job {
	
	private static Log log = LogFactory.getLog(JobA.class);

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		log.info("JobA doit ......");
	}

}
package com.test.quartz.jobs;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobB implements Job {
	
	private static Log log = LogFactory.getLog(JobB.class);

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		log.info("JobB doit ......");
	}

}
package com.test.quartz.jobs;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class JobC implements Job {
	
	private static Log log = LogFactory.getLog(JobC.class);

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		log.info("JobC doit ......");
	}

}

 

多任务的测试类:

package com.test.quartz;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.test.quartz.jobs.JobA;
import com.test.quartz.jobs.JobB;
import com.test.quartz.jobs.JobC;

public class CronTriggerExample {
	
	private static Log log = LogFactory.getLog(CronTriggerExample.class);
	
	public static void main(String[] args) throws Exception {
		
		JobKey jobKeyA = new JobKey("jobA", "group1");
		JobDetail jobA = JobBuilder.newJob(JobA.class).withIdentity(jobKeyA).build();
 
    	JobKey jobKeyB = new JobKey("jobB", "group1");
    	JobDetail jobB = JobBuilder.newJob(JobB.class).withIdentity(jobKeyB).build();
 
    	JobKey jobKeyC = new JobKey("jobC", "group1");
    	JobDetail jobC = JobBuilder.newJob(JobC.class).withIdentity(jobKeyC).build();
    	
    	
    	Trigger trigger1 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();
    	Trigger trigger2 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName2", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?")).build(); 
    	Trigger trigger3 = TriggerBuilder.newTrigger().withIdentity("dummyTriggerName3", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?")).build();
    	 
    	Scheduler scheduler = new StdSchedulerFactory().getScheduler();
    	scheduler.start();
    	
    	scheduler.scheduleJob(jobA, trigger1);
    	scheduler.scheduleJob(jobB, trigger2);
    	scheduler.scheduleJob(jobC, trigger3);
		
	}

}

 

来点总结:

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/lenglingx/blog/873607

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值