Quartz的使用(带spring整合)

一丶导入quartz_jar包

在这里插入图片描述

二丶定义一个Quartz的任务类

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;
	private Integer age;
	
	public String getName() {
		return name;
	}


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


	public Integer getAge() {
		return age;
	}


	public void setAge(Integer age) {
		this.age = age;
	}

	// 定义Quartz任务
	@Override
	public void execute(JobExecutionContext context) throws JobExecutionException {
			//获取任务名称
			JobKey key = context.getJobDetail().getKey();
			System.out.println("key"+key);
			//获取传递过来的参数
			JobDataMap dataMap = context.getJobDetail().getJobDataMap();
			System.out.println("name:" + dataMap.getString("name"));
			System.out.println("age:" + dataMap.getInt("age"));
			
			//System.out.println("name:" + name);
			//System.out.println("age:" + age);
			//System.out.println();
	}

}

写一个类然后实现 Job接口,重写execute方法 可以通过context来获取任务名和传过来的参数,如写了set,get方法可以直接通过封装的字段名获取。

三丶使用定义的任务

import java.text.ParseException;
import java.text.SimpleDateFormat;
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;

import com.znsd.quartz.utils.MyJob;
/**
 * SimpleTrigger
 * @author Liuyl
 *如果你需要在一个指定时间段内执行一次作业任务
 *或是在指定的时间间隔内多次执行作业任务,
 *SimpleTrigger应该能满足你的调度需求。
 */
public class Demo2 {
	public static void main(String[] args) throws SchedulerException, ParseException {
		//创建任务实例 withIdentity("MyJob", "group"),任务名,分组名
		 JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("MyJob", "group")
				 //传递数据,通过键值对方式传递
				 .usingJobData("name", "牛逼")
				 .usingJobData("age",20)
				 .build();
		//设定结束时间
		 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		 Date endtime = sdf.parse("2019-07-17 10:02:00");
		 //创建一个触发器设置开始执行时间,每个5秒执行一次,总共执行10次。
		 SimpleTrigger trigger = TriggerBuilder.newTrigger()
					.withIdentity("triggerDemo1", "group1")
					//在什么时候开始任务
					.startAt(new Date())
					.withSchedule(SimpleScheduleBuilder.simpleSchedule()
					.withIntervalInSeconds(2).repeatForever())
					//结束时间
					.endAt(endtime)
					.build();
		 //创建调度器
		 Scheduler scheduler=new StdSchedulerFactory().getScheduler();
		 scheduler.scheduleJob(job,trigger);
		 //启动
		 scheduler.start();

	} 	
}

SimpleTrigger属性和方法

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

Cron表达式

Cron表达式由6~7个由空格分隔的时间元素组成。第7个元素可选

位置字段含义范围允许的特殊字符
10-59, . * /
2分钟0-59, . * /
3小时0-23, . * /
41-31, . * / L W C
51-12或JAN, . * /
6星期几1-7或SUN-STA, . * / L C #
71970-2099, . * /

CronTrigger使用

import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import com.znsd.quartz.utils.MyJob;

/**
 * Cron表达式
 * 
“ - ”中划线,表示一个范围
“ , ”使用逗号间隔的数据,表示一个列表
“ * ”表示每一个值,它可以用于所有字段。在小时字段表示每小时。
“ ? ”该字符仅用于“月份中的哪一天”字段和“星期几”字段,表示不指定值
“ / ”通常表示为x/y,x为起始值,y表示值的增量。
“ L ”表示最后一天,仅在日期和星期字段中使用
“ # ”只能用于“星期几”字段,表示这个月的第几个周几。例如:“6#3”指这个月第三个周五
 * @author Liuyl
 *
 */
public class Demo3 {
	public static void main(String[] args) throws SchedulerException {
		JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("myJob", "group").build();
		//周一至周五,早上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();
		 //创建调度器
		 Scheduler scheduler=new StdSchedulerFactory().getScheduler();
		 scheduler.scheduleJob(job,trigger);
		 //启动
		 scheduler.start();
	}
}

与spring框架一起整合

首先导入需要的jar包

在这里插入图片描述
这里我导入的包有些多有些不是必须包我也导了

定义一个任务类

public class SpringJob  {

	// 定义Quartz任务
	public void testJob() {
		//执行的任务
		System.out.println("spring Job");
	}

}

配置xml文件

<?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 id="myjob" class="com.znsd.quartz.utils.SpringJob"></bean>
	<!-- 添加任务 -->
	<bean id="jobDetail1"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="myjob" />
		<property name="targetMethod" value="testJob" />
	</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>
	<!-- 配置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 class Demo4 {
	public static void main(String[] args) throws SchedulerException {
		ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值