Spring Quartz 定时器任务
本文介绍了Spring Quartz使用定时器任务的2种方式
- 基于XML文件的方式
- 基于注解的方式
除此之外,还较少了Cron表达式的基本使用
Spring Quartz部分有如下一些核心概念:
Scheduler是一个计划调度器容器,容器里面可以很多的JobDetail和Trigger,当容器启动后,里面的每个JobDetail都会根据Trigger按部就班自动去执行。容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率
JobDetail是一个可执行的工作,它本身可能是有状态的
Trigger代表一个任务执行计划的配置,什么时候去启动一个Job。
当JobDetail和Trigger在Scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。
项目源码地址:https://github.com/upshi/spring-quartz
1. 环境介绍
Spring:4.3.6.RELEASE
Quzrtz:2.2.3
pom.xml文件部分相关配置如下:
<properties>
<spring.version>4.3.6.RELEASE</spring.version>
<quartz.version>2.2.3</quartz.version>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.21</slf4j.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- ################################# SPRING #################################### -->
<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-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- ################################# QUARTZ #################################### -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>${quartz.version}</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>${quartz.version}</version>
</dependency>
<!-- ################################# LOG #################################### -->
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
</dependencies>
2. 基于XML文件的方式
2.1 创建Job类
使用Quartz非常简单,只要写一个Job类,不需要继承或者实现任何类,包含定时器需要执行任务的代码即可,如下,我创建了一个类XMLBasedJob.java,这里的逻辑非常简单,只是定时在控制台输出一段话。
pack