Quartz和Spring整合配置使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35213388/article/details/81541743

核心概念

1scheduler是一个计划调度器容器,容器里面可以盛放众多的JobDetailtrigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。

2JobDetail是一个可执行的工作,它本身可能是有状态的。

3Trigger触发器代表一个调度参数的配置,什么时候去调。

4、当JobDetailTriggerscheduler容器上注册后,形成了装配好的作业(JobDetailTrigger所组成的一对儿),就可以伴随容器启动而调度执行了。

5scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。

一丶POM文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.exam</groupId>
  <artifactId>quartz</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <!-- 通过属性定义指定jar的版本 -->
	<properties>
		<spring.version>4.2.4.RELEASE</spring.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>

		<!-- 引入quartz对应的依赖 -->
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz</artifactId>
			<version>2.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.quartz-scheduler</groupId>
			<artifactId>quartz-jobs</artifactId>
			<version>2.2.3</version>
		</dependency>
	</dependencies>
</project>

 

二丶创建作业对象

public class MyJob {

    public void run() {
	String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
	System.out.println("任务调度执行:" + format);
    }
}

三丶在Spring配置文件注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/context
						http://www.springframework.org/schema/context/spring-context.xsd
						http://www.springframework.org/schema/aop
						http://www.springframework.org/schema/aop/spring-aop.xsd
						http://www.springframework.org/schema/tx 
						http://www.springframework.org/schema/tx/spring-tx.xsd
						">
	<!-- 注册自定义作业类 -->
	<bean id="myJob" class="com.exam.quartz.MyJob"></bean>

	<!-- 配置JobDetail -->
	<bean id="jobDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 注入目标对象 -->
		<property name="targetObject" ref="myJob" />
		<!-- 注入目标方法 -->
		<property name="targetMethod" value="run" />
	</bean>

	<!-- 配置触发器 -->
	<bean id="myTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<!-- 注入任务详情对象 -->
		<property name="jobDetail" ref="jobDetail" />
		<!-- 注入cron表达式,通过这个表达式指定触发的时间点 -->
		<property name="cronExpression">
			<!-- 2秒执行一次 -->
			<value>0/2 * * * * ?</value>
		</property>
	</bean>

	<!-- 配置调度工厂 -->
	<bean id="schedulerFactoryBean"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<!-- 注入触发器 -->
		<property name="triggers">
			<list>
				<ref bean="myTrigger" />
			</list>
		</property>
	</bean>
</beans>

四丶加载Spring配置文件时会自动调度

public class APP {
    public static void main(String[] args) {
	// 加载了配置文件就开始调度
	new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

五丶cron表达式相关

1.在线cron表达式生成器

http://cron.qqe2.com/

http://www.pppet.net/

2.cron语法相关

CronTrigger配置完整格式为: [秒] [分] [小时] [日] [月] [周] [年]

字段

允许值

允许的特殊字符

0-59

, - * /

0-59

, - * /

小时

0-23

, - * /

日期

1-31

, - * ? / L W C

月份

1-12 或者 JAN-DEC

, - * /

星期

1-7 或者 SUN-SAT

, - * ? / L C #

年(可选)

留空, 1970-2099

, - * /

* 表示所有值。在分钟里表示每一分钟触发。在小时,日期,月份等里面表示每一小时,每一日,每一月。

?表示不指定值。表示不关心当前位置设置的值。 比如不关心是周几,则周的位置填写?。

- 表示区间。小时设置为10-12表示10,11,12点均会触发。

,表示多个值。 小时设置成10,12表示10点和12点会触发。

/ 表示递增触发。 5/15表示从第5秒开始,每隔15秒触发。

L 表示最后的意思。 日上表示最后一天。星期上表示星期六或7。 L前加数据,表示该数据的最后一个。

  星期上设置6L表示最后一个星期五。  6表示星期五

W表示离指定日期最近的工作日触发。15W离该月15号最近的工作日触发。

#表示每月的第几个周几。 6#3表示该月的第三个周五

表达式意义 
"0 0 12 * * ?" 每天中午12点触发 
"0 15 10 ? * *" 每天上午10:15触发 
"0 15 10 * * ?" 每天上午10:15触发 
"0 15 10 * * ? *" 每天上午10:15触发 
"0 15 10 * * ? 2005" 2005年的每天上午10:15触发 
"0 * 14 * * ?" 在每天下午2点到下午2:59期间的每1分钟触发 
"0 0/5 14 * * ?" 在每天下午2点到下午2:55期间的每5分钟触发 
"0 0/5 14,18 * * ?" 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发 
"0 0-5 14 * * ?" 在每天下午2点到下午2:05期间的每1分钟触发 
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44触发 
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发 
"0 15 10 15 * ?" 每月15日上午10:15触发 
"0 15 10 L * ?" 每月最后一日的上午10:15触发 
"0 15 10 ? * 6L" 每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最后一个星期五上午10:15触发 
"0 15 10 ? * 6#3" 每月的第三个星期五上午10:15触发 
每天早上6点     0 6 * * *     每两个小时     0 */2 * * * 
晚上11点到早上8点之间每两个小时,早上八点    0 23-7/2,8 * * * 
每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点     0 11 4 * 1-3 
1月1日早上4点     0 4 1 1 *

猜你喜欢

转载自blog.csdn.net/qq_35213388/article/details/81541743
今日推荐