Quartz是什么?
quartz是一个由java编写的任务调度库,由OpenSymphony组织开源出来。他其实拥有相当丰富的使用场景,比如银行每个月在某个固定时间会给用户发送一封信用卡账单,支付宝每个月也会给用户发送每月账单,移动公司每月也会给用户发送当月花费账单等很多的使用场景,遥想当年还没有相关框架的时候,对于那些老程序员们来说这些功能代码都是需要自己区写底层代码来实现的.而现在有了Quartz这样的框架后,我们想要实现很多即使复杂的定时调度功能只需要调用框架API即可很容易的实现我们象压的功能.
而quartz的核心作用,是使任务调度变得丰富、高效、安全,开发者只需要调几个quartz接口并做简单配置,即可实现上述需求。
quartz号称能够同时对上万个任务进行调度,拥有丰富的功能特性,包括任务调度、任务持久化、可集群化、插件等。
那么下面我们就来自己实现一个简单的Quartz入门案列
官网:http://www.quartz-scheduler.org/
创建一个maven工程
1.到官网复制quartz的坐标
<!-- 定时任务调度的框架 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.2.1</version>
</dependency>
2创建一个自定义的任务类
import java.util.Date;
/**
* 自定义任务
* @author LuoJoy
*
*/
public class MyJob {
public void sendMsg() {
System.out.println("目标方法执行了"+new Date());
}
}
提供spring配置文件,注册自定义任务对象
<!--注册自定义任务对象 -->
<bean id="myjob" class="com.bos.quartz.MyJob"></bean>
在spring配置文件中注册一个JobDetail,通过反射调用自定义任务对象的方法
<!-- 注册jobDetail,通过反射调用自定义任务对象 -->
<bean id="myJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 目标对象 -->
<property name="targetObject" ref="myJob"></property>
<property name="targetMethod" value="sendMsg"></property>
</bean>
在spring配置文件中注册一个触发器,指定任务的触发时间
<!-- CronTriggerFactoryBean:触发器 触发什么任务 什么时间触发 -->
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 配置触发哪个任务 -->
<property name="jobDetail" ref="myJobDetail"></property>
<!-- 什么时间触发任务 cronExpression:cron表达式 每隔5秒钟执行一次任务 -->
<property name="cronExpression" value="0/5 * * * * ? 2020"></property>
</bean>
在spring配置文件中注册一个调度工厂对象,统一调度任务
<!-- SchedulerFactoryBean:配置计划调度器容器 -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
创建spring工厂,执行任务调度
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class QuartzTest {
public static void main(String[] args) {
new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
}
}
测试结果,这样一个简单的quartz和spring整合入门案例就完成啦
log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
目标方法执行了Fri Aug 03 17:50:00 CST 2018
目标方法执行了Fri Aug 03 17:50:05 CST 2018
目标方法执行了Fri Aug 03 17:50:10 CST 2018
目标方法执行了Fri Aug 03 17:50:15 CST 2018
目标方法执行了Fri Aug 03 17:50:20 CST 2018
目标方法执行了Fri Aug 03 17:50:25 CST 2018
目标方法执行了Fri Aug 03 17:50:30 CST 2018
目标方法执行了Fri Aug 03 17:50:35 CST 2018
目标方法执行了Fri Aug 03 17:50:40 CST 2018
目标方法执行了Fri Aug 03 17:50:45 CST 2018
目标方法执行了Fri Aug 03 17:50:50 CST 2018
目标方法执行了Fri Aug 03 17:50:55 CST 2018
目标方法执行了Fri Aug 03 17:51:00 CST 2018