quartz基本使用demo(quartz 一)

目录

      • 基本环境配置
        • 新建maven工程,pom依赖
        • log配置
      • demo使用
        • helloword入门
        • 参数传递
      • 监听器使用

基本环境配置

新建maven工程,pom依赖

		<dependency>
			<groupId>org.slf4jgroupId>
			<artifactId>slf4j-log4j12artifactId>
			<version>1.7.25version>
		dependency>
		<dependency>
			<groupId>org.quartz-schedulergroupId>
			<artifactId>quartzartifactId>
			<version>2.2.3version>
		dependency>
		<dependency>
			<groupId>org.quartz-schedulergroupId>
			<artifactId>quartz-jobsartifactId>
			<version>2.2.3version>
		dependency>

log配置

log4j.xml




<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="default" class="org.apache.log4j.ConsoleAppender">
    <param name="target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="[%p] %d{dd MMM hh:mm:ss.SSS aa} %t [%c]%n%m%n%n"/>
    layout>
  appender>
 <logger name="org.quartz">
   <level value="error" />
 logger>
  <root>
    <level value="debug" />
    <appender-ref ref="default" />
  root>
log4j:configuration>

demo使用

helloword入门

定义一个任务,实现Job 接口

public class EchoJob  implements Job {
    private static Logger _log = LoggerFactory.getLogger(EchoJob.class);

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		_log.debug("echo: 入门例子");
	}
}

将任务和调度器绑定起来

/**
 * Created by it
 * Created in 2019年1月26日
 * Description:
 */
public class Example1 {
	
	private static Logger _log = LoggerFactory.getLogger(Example1.class);

	public static void main(String[] args) throws Exception {
		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		scheduler.start();
		_log.debug("调度器启动成功...");
		
		// 定义一次任务
		JobDetail job = JobBuilder.newJob(EchoJob.class)
				.withIdentity("jobName1", "groupName1").build();
		// 定义执行时间,2秒1次
		Trigger trigger = TriggerBuilder
				.newTrigger()
				.withIdentity("triggerName1", "groupName1")
				.withSchedule(
						CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
				.build();
		
		_log.debug("调度器,添加一次任务:{}", job.getKey());
		scheduler.scheduleJob(job, trigger);
		
		TimeUnit.SECONDS.sleep(10);
		scheduler.shutdown(true);
		_log.debug("调度器10秒后停止,shutdown入参:{},让任务调度完", true);
	}
}

测试

[DEBUG] 27 一月 03:47:24.020 下午 main [priv.dengjl.my_quartz.scheduler.Example1]
调度器启动成功...

[DEBUG] 27 一月 03:47:24.033 下午 main [priv.dengjl.my_quartz.scheduler.Example1]
调度器,添加一次任务:groupName1.jobName1

[DEBUG] 27 一月 03:47:24.044 下午 DefaultQuartzScheduler_Worker-1 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 03:47:26.005 下午 DefaultQuartzScheduler_Worker-2 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 03:47:28.001 下午 DefaultQuartzScheduler_Worker-3 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 03:47:30.001 下午 DefaultQuartzScheduler_Worker-4 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 03:47:32.000 下午 DefaultQuartzScheduler_Worker-5 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 03:47:34.001 下午 DefaultQuartzScheduler_Worker-6 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 03:47:34.511 下午 main [priv.dengjl.my_quartz.scheduler.Example1]
调度器20秒后停止,shutdown入参:true,让任务调度完

Trigger中的时间设置
我在quartz只是用CronTrigger方式,其他不考虑,实际工程也是用cron表达式
cron表达式在线生成:http://cron.qqe2.com/
quartz基本使用demo(quartz 一)_第1张图片

参数传递

定义一个任务,实现Job 接口

public class EchoParameterJob implements Job {
	private static Logger _log = LoggerFactory.getLogger(EchoParameterJob.class);

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
		_log.debug("JobDetail: 输出传递参数:{}", jobDataMap.getString("param"));
		JobDataMap jobDataMap2 = context.getTrigger().getJobDataMap();
		_log.debug("Trigger: 输出传递参数:{}", jobDataMap2.getString("param2"));
	}
}

参数传递

/**
 * Created by it
 * Created in 2019年1月26日
 * Description: 参数传递
 */
public class Example2 {
	
	private static Logger _log = LoggerFactory.getLogger(Example2.class);

	public static void main(String[] args) throws Exception {
		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		scheduler.start();
		_log.debug("调度器启动成功...");
		
		// job参数传递
		JobDataMap jobDataMap = new JobDataMap();
		jobDataMap.put("param", "测试数据");
		// 定义一次任务
		JobDetail job = JobBuilder
				.newJob(EchoParameterJob.class)
				.withIdentity("jobName1", "groupName1")
				.usingJobData(jobDataMap)
				.build();
		// trigger参数传递
		JobDataMap jobDataMap2 = new JobDataMap();
		jobDataMap2.put("param2", "xxxxxxx");
		// 定义执行时间,2秒1次
		Trigger trigger = TriggerBuilder
				.newTrigger()
				.withIdentity("triggerName1", "groupName1")
				.usingJobData(jobDataMap2)
				.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
				.build();
		
		_log.debug("调度器,添加一次任务:{}", job.getKey());
		scheduler.scheduleJob(job, trigger);
		
		TimeUnit.SECONDS.sleep(4);
		scheduler.shutdown(true);
		_log.debug("调度器4秒后停止,shutdown入参:{},让任务调度完", true);
	}
}

测试

[DEBUG] 27 一月 04:21:43.053 下午 main [priv.dengjl.my_quartz.scheduler.Example2]
调度器启动成功...

[DEBUG] 27 一月 04:21:43.080 下午 main [priv.dengjl.my_quartz.scheduler.Example2]
调度器,添加一次任务:groupName1.jobName1

[DEBUG] 27 一月 04:21:44.009 下午 DefaultQuartzScheduler_Worker-1 [priv.dengjl.my_quartz.job.EchoParameterJob]
JobDetail: 输出传递参数:测试数据

[DEBUG] 27 一月 04:21:44.010 下午 DefaultQuartzScheduler_Worker-1 [priv.dengjl.my_quartz.job.EchoParameterJob]
Trigger: 输出传递参数:xxxxxxx

[DEBUG] 27 一月 04:21:46.001 下午 DefaultQuartzScheduler_Worker-2 [priv.dengjl.my_quartz.job.EchoParameterJob]
JobDetail: 输出传递参数:测试数据

[DEBUG] 27 一月 04:21:46.001 下午 DefaultQuartzScheduler_Worker-2 [priv.dengjl.my_quartz.job.EchoParameterJob]
Trigger: 输出传递参数:xxxxxxx

[DEBUG] 27 一月 04:21:47.540 下午 main [priv.dengjl.my_quartz.scheduler.Example2]
调度器4秒后停止,shutdown入参:true,让任务调度完

监听器使用

注册监听事件

/**
 * Created by it
 * Created in 2019年1月26日
 * Description: 监听器的使用
 */
public class Example3 {
	
	private static Logger _log = LoggerFactory.getLogger(Example3.class);

	public static void main(String[] args) throws Exception {
		Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
		scheduler.start();
		_log.debug("调度器启动成功...");
		
		// 注册监听器
		scheduler.getListenerManager().addSchedulerListener(new MySchedulerListener());
		scheduler.getListenerManager().addJobListener(new MyJobListener(), KeyMatcher.keyEquals(new JobKey("jobName1", "groupName1")));
		// 一般不用riggerListener事件
		//scheduler.getListenerManager().addTriggerListener(new MyTriggerListener(), KeyMatcher.keyEquals(new TriggerKey("jobName1", "groupName1")));
		
		// 定义一次任务
		JobDetail job = JobBuilder.newJob(EchoJob.class)
				.withIdentity("jobName1", "groupName1").build();
		// 定义执行时间,2秒1次
		Trigger trigger = TriggerBuilder
				.newTrigger()
				.withIdentity("triggerName1", "groupName1")
				.withSchedule(
						CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
				.build();
		
		_log.debug("调度器,添加一次任务:{}", job.getKey());
		scheduler.scheduleJob(job, trigger);
		
		TimeUnit.SECONDS.sleep(6);
		scheduler.shutdown(true);
		_log.debug("调度器10秒后停止,shutdown入参:{},让任务调度完", true);
	}
}

SchedulerListener监听器

public class MySchedulerListener implements SchedulerListener {
	
	private static Logger _log = LoggerFactory.getLogger(MySchedulerListener.class);

	@Override
	public void jobScheduled(Trigger trigger) {
		_log.debug("SchedulerListener中事件:{}", "jobScheduled");
	}

	@Override
	public void jobUnscheduled(TriggerKey triggerKey) {
		_log.debug("SchedulerListener中事件:{}", "jobUnscheduled");
	}

	@Override
	public void triggerFinalized(Trigger trigger) {
		_log.debug("SchedulerListener中事件:{}", "triggerFinalized");
	}

	@Override
	public void triggerPaused(TriggerKey triggerKey) {
		_log.debug("SchedulerListener中事件:{}", "triggerPaused");
	}

	@Override
	public void triggersPaused(String triggerGroup) {
		_log.debug("SchedulerListener中事件:{}", "triggersPaused");
	}

	@Override
	public void triggerResumed(TriggerKey triggerKey) {
		_log.debug("SchedulerListener中事件:{}", "triggerResumed");
	}

	@Override
	public void triggersResumed(String triggerGroup) {
		_log.debug("SchedulerListener中事件:{}", "triggersResumed");
	}

	@Override
	public void jobAdded(JobDetail jobDetail) {
		_log.debug("SchedulerListener中事件:{}", "jobAdded");
	}

	@Override
	public void jobDeleted(JobKey jobKey) {
		_log.debug("SchedulerListener中事件:{}", "jobDeleted");
	}

	@Override
	public void jobPaused(JobKey jobKey) {
		_log.debug("SchedulerListener中事件:{}", "jobPaused");
	}

	@Override
	public void jobsPaused(String jobGroup) {
		_log.debug("SchedulerListener中事件:{}", "jobsPaused");
	}

	@Override
	public void jobResumed(JobKey jobKey) {
		_log.debug("SchedulerListener中事件:{}", "jobResumed");
	}

	@Override
	public void jobsResumed(String jobGroup) {
		_log.debug("SchedulerListener中事件:{}", "jobsResumed");
	}

	@Override
	public void schedulerError(String msg, SchedulerException cause) {
		_log.debug("SchedulerListener中事件:{}", "schedulerError");
	}

	@Override
	public void schedulerInStandbyMode() {
		_log.debug("SchedulerListener中事件:{}", "schedulerInStandbyMode");
	}

	@Override
	public void schedulerStarted() {
		_log.debug("SchedulerListener中事件:{}", "schedulerStarted");
	}

	@Override
	public void schedulerStarting() {
		_log.debug("SchedulerListener中事件:{}", "schedulerStarting");
	}

	@Override
	public void schedulerShutdown() {
		_log.debug("SchedulerListener中事件:{}", "schedulerShutdown");
	}

	@Override
	public void schedulerShuttingdown() {
		_log.debug("SchedulerListener中事件:{}", "schedulerShuttingdown");
	}

	@Override
	public void schedulingDataCleared() {
		_log.debug("SchedulerListener中事件:{}", "schedulingDataCleared");
	}

}

JobListener监听器

public class MyJobListener implements JobListener {
	
	private static Logger _log = LoggerFactory.getLogger(MyJobListener.class);

	@Override
	public String getName() {
		return "MyJobListener";
	}

	@Override
	public void jobToBeExecuted(JobExecutionContext context) {
		_log.debug("MyJobListener中事件:{}", "jobToBeExecuted");
	}

	@Override
	public void jobExecutionVetoed(JobExecutionContext context) {
		_log.debug("MyJobListener中事件:{}", "jobExecutionVetoed");
	}

	@Override
	public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) {
		_log.debug("MyJobListener中事件:{}", "jobWasExecuted");
	}

}

测试

[DEBUG] 27 一月 04:53:46.003 下午 main [priv.dengjl.my_quartz.scheduler.Example3]
调度器启动成功...

[DEBUG] 27 一月 04:53:46.018 下午 main [priv.dengjl.my_quartz.scheduler.Example3]
调度器,添加一次任务:groupName1.jobName1

[DEBUG] 27 一月 04:53:46.020 下午 main [priv.dengjl.my_quartz.listenner.MySchedulerListener]
SchedulerListener中事件:jobAdded

[DEBUG] 27 一月 04:53:46.020 下午 main [priv.dengjl.my_quartz.listenner.MySchedulerListener]
SchedulerListener中事件:jobScheduled

[DEBUG] 27 一月 04:53:46.029 下午 DefaultQuartzScheduler_Worker-1 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobToBeExecuted

[DEBUG] 27 一月 04:53:46.029 下午 DefaultQuartzScheduler_Worker-1 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 04:53:46.029 下午 DefaultQuartzScheduler_Worker-1 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobWasExecuted

[DEBUG] 27 一月 04:53:48.001 下午 DefaultQuartzScheduler_Worker-2 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobToBeExecuted

[DEBUG] 27 一月 04:53:48.001 下午 DefaultQuartzScheduler_Worker-2 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 04:53:48.001 下午 DefaultQuartzScheduler_Worker-2 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobWasExecuted

[DEBUG] 27 一月 04:53:50.005 下午 DefaultQuartzScheduler_Worker-3 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobToBeExecuted

[DEBUG] 27 一月 04:53:50.006 下午 DefaultQuartzScheduler_Worker-3 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 04:53:50.007 下午 DefaultQuartzScheduler_Worker-3 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobWasExecuted

[DEBUG] 27 一月 04:53:52.001 下午 DefaultQuartzScheduler_Worker-4 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobToBeExecuted

[DEBUG] 27 一月 04:53:52.001 下午 DefaultQuartzScheduler_Worker-4 [priv.dengjl.my_quartz.job.EchoJob]
echo: 入门例子

[DEBUG] 27 一月 04:53:52.001 下午 DefaultQuartzScheduler_Worker-4 [priv.dengjl.my_quartz.listenner.MyJobListener]
MyJobListener中事件:jobWasExecuted

[DEBUG] 27 一月 04:53:52.022 下午 main [priv.dengjl.my_quartz.listenner.MySchedulerListener]
SchedulerListener中事件:schedulerInStandbyMode

[DEBUG] 27 一月 04:53:52.023 下午 main [priv.dengjl.my_quartz.listenner.MySchedulerListener]
SchedulerListener中事件:schedulerShuttingdown

[DEBUG] 27 一月 04:53:52.520 下午 main [priv.dengjl.my_quartz.listenner.MySchedulerListener]
SchedulerListener中事件:schedulerShutdown

[DEBUG] 27 一月 04:53:52.520 下午 main [priv.dengjl.my_quartz.scheduler.Example3]
调度器10秒后停止,shutdown入参:true,让任务调度完


你可能感兴趣的:(quartz)