quartz 任务调度

quartz 任务调度

3个基本概念

任务:就是执行的工作内容。Quartz提供Job接口来支持任务定义,Job接口中只有一个execute()方法,开发者需要在自己的任务类中实现该方法。
触发器:定义触发Job执行的时间的触发规则。Quartz提供Trigger类及其子类支持触发器功能。
调度器:Quartz提供了Scheduler接口,它是Quartz独立运行的容器。将工作任务和触发器注册到调度器中,保证任务可以在正确的时间执行。

jar

在这里插入图片描述

创建任务

package com.znsd.quartz.demo;

import java.util.Date;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class Test {
	
	public static void main(String[] args) throws SchedulerException {
		
		//---创建一个任务的实列(JobDetail)
		JobDetail build = JobBuilder.newJob(MyJob.class)
							.usingJobData("name","zhangsan")	//传递参数
							.withIdentity("myjob", "group1").build();
		
		//---创建一个触发器(Trigger)
		SimpleTrigger build2 = TriggerBuilder.newTrigger()
							   .withIdentity("mytrigger", "group1")
							   //.startAt(new Date(System.currentTimeMillis()+5000))  设定多少时间后执行
							   .withSchedule(SimpleScheduleBuilder.simpleSchedule()
									   .withIntervalInSeconds(5) //每隔5秒启动一次
									   .withRepeatCount(3)	//循环3次 使用该方法不可使用repeatForever方法
									   //.repeatForever()	//
									   ).build(); 
		/*String cron = "00 32 7 * * ?";		//使用cron表达式
		Trigger build2 = TriggerBuilder.newTrigger()
				   .withIdentity("mytrigger", "group1")
				   .withSchedule(CronScheduleBuilder.cronSchedule(cron))
				   .forJob(build)
				   .build();*/
		// 创建调度器
		Scheduler s = new StdSchedulerFactory().getScheduler();
		s.scheduleJob(build, build2);
		s.start();
		
	}
	
}


调度

package com.znsd.quartz.demo;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;

public class MyJob implements Job{
	
	private String name;
	

	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}


	@Override
	public void execute(JobExecutionContext job) throws JobExecutionException {
		
		JobKey key = job.getJobDetail().getKey();
		System.out.println(key);		//----获取任务名字
		
		
		//获取传递来的参数
		//JobDataMap map = job.getJobDetail().getJobDataMap();
		//System.out.println(map.getString("name"));
		
		//若该类有对应名称的setter方法则不需要使用getJobDataMap方法获取参数
		System.out.println(name);
		
		
		System.out.println("这是循环内容!!");
	}

}


Quarts常用的接口

Job : 执行任务调度的组件要实现的接口。
JobDetail : 用来定义Job的实例
JobBuilder :用来定义或创建JobDetail的实例
Tigger :定义一个Job何时被执行的组件,也称触发器。
TriggerBuilder: 用来创建Tigger的实例
Scheduler :跟任务调度相关的接口

调度的声明周期,起于SchedulerFactory的创建,止于shutdown()方法。

SimpleTrigger属性和方法

jobKey :获取任务名称
Identity :设置表示列,对应withIdentity()方法
stratTime :设置开始时间,对应startAt()方法
endTime :设置结束时间,对应endAt()方法
Priority :优先级设置。对应withPriority()方法

cron表达式

Cron表达式由6~7个由空格分隔的时间元素组成。第7个元素可选
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

spring整合Quartz

所需jar包

在这里插入图片描述
电脑配置不行导入aop和aspects会让eclipse终止运行

<!-- 定义任务 -->
	<bean id="myjob" class="com.znsd.sq.demo.MyJob"></bean>
	
	<!-- 添加任务 -->
	<bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="myjob"/>
		<property name="targetMethod" value="task"/>
	</bean>
	
	<!-- 配置SimpleTrigger任务调度器  -->
	<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
		<property name="jobDetail" ref="jobDetail1" />
		<property name="startDelay" value="1000" />  
		    <property name="repeatInterval" value="2000" />  
		</bean>
		<!-- 配置触发器开始 -->
	<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
		<list>
		    <ref bean="simpleTrigger"/>
		</list>
		</property>
	</bean>
	
	<!-- 配置CronTrigger任务调度器 -->
	<!-- <bean id="crontestJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail" ref="jobDetail1" />
		<property name="cronExpression" value="0/2 * * * * ?" />	使用cron表达式
	</bean>
	
	配置触发器开始
	<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
		<list>
			<ref bean="simpleTrigger"/>
			<ref bean="crontestJobTrigger"/>
		</list>
		</property>
	</bean> -->
	

执行的任务

package com.znsd.sq.demo;

public class MyJob {
	
	public void task() {
		System.out.println("执行的任务");
	}
	
}

启动

ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值