关于Quartz以及在spring中使用Quartz的配置以及使用。

关于Quartz的配置以及使用

什么是Quartz:

Quartz是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间运行。
Quartz可以用来创建简单或复杂的日程安排执行几十,几百,甚至是几万的作业数。

Quartz的核心概念:

Quartz对任务调度进行了高度抽象,提出了3个核心概念,并在org.quartz包中通过接口和类进行了描述
	1.任务:就是执行的工作内容。Quartz提供Job接口来支持任务定义,Job接口中只有一个execute()方法,开发者需要在自己的任务类中实现该方法。
	2.触发器:定义触发Job执行的时间的触发规则。Quartz提供Trigger类及其子类支持触发器功能。
	3.调度器:Quartz提供了Scheduler接口,它是Quartz独立运行的容器。将工作任务和触发器注册到调度器中,保证任务可以在正确的时间执行。

代码演示:完成功能,对员工张三的工作任务进行提醒,实现每3秒钟进行一次任务提醒。

1.Quartz需要导入的jar包

在这里插入图片描述
一、定义一个Quartz任务,需要实现Job接口。

// Quartz任务
public class MyJob implements Job {

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		
		System.out.println("该工作了!!!");

	}

}

二、调用以上Quartz任务.

public static void main(String[] args) ,{
		
		// 创建一个任务实例(JobDetail)
		JobDetail job = JobBuilder.newJob(MyJob.class)
						.build();
		
		// 创建一个触发器(Trigger)
		Trigger trigger = TriggerBuilder.newTrigger()
						.withSchedule(SimpleScheduleBuilder.simpleSchedule()
						// 设置为每间隔5秒执行一次Quartz任务
						.withIntervalInSeconds(3).repeatForever())
						.build();
		
		// 创建调度器(Scheduler)
		Scheduler scheduler;
		try {
			scheduler = new StdSchedulerFactory().getScheduler();
			scheduler.scheduleJob(job,trigger);
			
			// 开始执行
			scheduler.start();
			
		} catch (SchedulerException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
}

以键值对的方式传送参数到Quartz任务

一、使用JobDetail类中的usingJobData方法进行传参。

JobDetail job = JobBuilder.newJob(MyJob.class)
						.usingJobData("name","张三")
						.build();

二、Quartz任务类中获取参数

public void execute(JobExecutionContext context) throws JobExecutionException {
		
		JobDataMap  map = context.getJobDetail().getJobDataMap();
		String name = map.getString("name");
		
		System.out.println(name+ ": 该工作了!!!");

}

三、以set方法的方式获取参数

public class MyJob implements Job {

	// 增加set方法以后会自动将参数赋值,前提是名称以及类型是一致的。
	private String name;
	
	public String getName() {
		return name;
	}

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

	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
		
		/*
		 * JobDataMap map = context.getJobDetail().getJobDataMap(); String name =
		 * map.getString("name");
		 */
		
		System.out.println(name+ ": 该吃饭了!!!");

	}

}

使用trigger的endTime属性来设置任务的结束时间.

		// 使用日期格式化指定时间
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date endtime = sdf.parse("2019-07-17 10:27:40");
		
		// 创建一个触发器(Trigger)
		Trigger trigger = TriggerBuilder.newTrigger()
						.withSchedule(SimpleScheduleBuilder.simpleSchedule()
						// 设置为每间隔5秒执行一次Quartz任务
						.withIntervalInSeconds(1).repeatForever())
						.endAt(endtime)
						.build();

使用CronTrigger

CronTrigger相比SimpleTrigger更常用,当你需要一个基于日历般概念的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间。
CronTrigger是基于Cron表达式的触发器。Cron表达式实际上是由7个子表达式组成的字符串,描述了时间表的详细信息,这些信息使用空格分开。

一、Cron表达式

在这里插入图片描述
Cron表达式的每个字段,都可以显式地规定一个值(如49)、一个范围(如1-6)、一个列表(如1,3,5)或者一个通配符(如*)

二、Cron表达式有几个特殊的字符,说明如下
在这里插入图片描述
三、Cron表达式示例
在这里插入图片描述

四、创建CronTrigger触发器。

//周一至周五,早上9点到下午18点,每2秒钟执行一次。
String cronString = "0/2 * 9-18 ? * MON-FRI";
Trigger trigger = TriggerBuilder.newTrigger()
	.withIdentity("trigger1", "group1")	
	.withSchedule(CronScheduleBuilder.cronSchedule(cronString))
	.forJob(job)
	.build();

五、CronTrigger和SimpleTrigger的对比
在这里插入图片描述
CronTrigger允许用户更精准地控制任务的运行日期和时间,而不仅仅是定义工作的频度。
CronTrigger通过Cron表达式定义准确的运行时间点。

在Spring中使用Quartz

Spring对Quartz提供了支持,对Quartz的核心类进行了封装,使开发人员更便捷地实现任务调度。
使用声明的方式配置计划任务,大大简化了操作步骤,而且也降低了代码耦合。

完成任务:对员工张三的工作任务进行提醒,实现每3秒钟进行一次任务提醒。

一、spring需要导入的jar包
在这里插入图片描述
二、外加Quartz的jar包
在这里插入图片描述

代码实现

一、在spring中使用Quartz任务对象不需要实现接口。

public class MyJob {

	public void testJob1() {
		
		System.out.println("张三该工作了!!!");

	}
	
}

二、1.spring文件中配置SimpleTrigger任务调度器的方法。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 创建任务bean -->
	<bean id="myjob" class="com.znsd.job.MyJob" />
	
	<!-- 添加任务 -->
	<bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	
		<property name="targetObject" ref="myjob" />
		<property name="targetMethod" value="testJob1" />
	
	</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>
	

</beans>

二、2.spring文件中配置CronTrigger任务调度器的方法。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 创建任务bean -->
	<bean id="myjob" class="com.znsd.job.MyJob" />
	
	<!-- 添加任务 -->
	<bean id="jobDetail1" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	
		<property name="targetObject" ref="myjob" />
		<property name="targetMethod" value="testJob1" />
	
	</bean>
	
	<!-- 配置CronTrigger任务调度器 -->
	<bean id="crontestJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
	<property name="jobDetail" ref="jobDetail1" />
	<property name="cronExpression" value="0/2 * * * * ?" />
	</bean>
	<!-- 配置触发器开始 -->
	<bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="triggers">
	    <list>
	<ref bean="simpleTrigger"/>
	<ref bean="crontestJobTrigger"/>
	</list>
	</property>
	</bean>
</beans>

三、添加测试类(添加测试类时只需要加载spring的xml文件即可)。

public static void main(String[] args) {
    ApplicationContext ac = 
	new ClassPathXmlApplicationContext("spring.xml");
}

以上就是关于Quartz任务调度的内容,感谢阅读。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值