Quartz可以用来做什么?
Quartz是一个任务调度框架。比如你遇到这样的问题
- 想每月几号,银行卡还款
- 想在每年纪念日的时候给女朋友发送一条祝福
这些问题总结起来就是:在某一个有规律的时间点干某件事。并且时间的触发的条件可以非常复杂(比如每月最后一个工作日的17:50),复杂到需要一个专门的框架来干这个事。 Quartz就是来干这样的事,你给它一个触发条件的定义,它负责到了时间点,触发相应的Job起来干活。
一个简单的Demo:
maven
<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.itqf.test</groupId>
<artifactId>day02_Quartz</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- spring的依赖 -->
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.1.3.RELEASE</version>
</dependency>
<!-- quartz的依赖 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
java
package com.itqf.job;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyJob {
public void run() {
//输出当前时间
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH-mm:ss").format(new Date()));
}
}
xml
<!-- 创建作业对象 -->
<bean id="myjob" class="com.itqf.job.MyJob"></bean>
<!-- 配置作业详情 -->
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="myjob"></property>
<property name="targetMethod" value="run"></property>
</bean>
<!-- 创建触发器 -->
<bean id="trigger1" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 配置作业详情对象 -->
<property name="jobDetail" ref="jobDetail"></property>
<!-- 配置触发条件 cron表达式-->
<property name="cronExpression" value="0/2 * * * * ?"></property>
</bean>
<!-- 调度器 调度器中可以有多个触发器 list中添加 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="trigger1"></ref>
</list>
</property>
</bean>
package com.itqf.job;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
//测试 直接创建出xml中的调度对象
public static void main(String[] args) {
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
这个demo演示了Quartz的三个基本要素:
- Scheduler:调度器。所有的调度都是由它控制.
- Trigger:触发器,将制定的触发对象和条件绑定.
- JobDetail:制定具体的作业对象的具体方法.