一.开头小叙:
之前介绍过Spring自带的定时task,虽然好用,配置理解起来都很简单。但是一旦定时挂了,如果不及时处理,数据库会产生很多脏数据。Quartz框架就可以避免这个问题,此框架在挂掉之后会重新启动。接下来说的是在Spring环境下的简单使用,如果想了解更多参见官网:http://www.quartz-scheduler.org。
二.使用步骤:
1.第一步:引入相关jar包,下面是maven依赖
<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.创建自己的定时任务类:
public class TestJob {
public void run() {
System.out.println("测试定时:" +
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
}
}
3.去Spring配置文件去注入一系列配置:
在注入之前希望大家能搞清楚配置的相互注入关系:主要的就是job---->jobDetail---->trigger---->scheduler,
具体各自什么概念大家自己百度,这里就不多细说。搞清楚注入关系,再来看下面的注入配置信息会容易理解。
<bean id="TestJob" class="com.cishoo.lovely.web.back.job.TestJob"></bean>
<bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!-- 注入目标对象 -->
<property name="targetObject" ref="TestJob"/>
<!-- 注入目标方法 -->
<property name="targetMethod" value="run"/>
</bean>
<bean id="myTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!-- 注入任务详情对象 -->
<property name="jobDetail" ref="jobDetail"/>
<!-- 注入cron表达式,通过这个表达式指定触发的时间点 -->
<property name="cronExpression">
<value>0 */1 * * * ? </value>
</property>
</bean>
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 注入触发器 -->
<property name="triggers">
<list>
<ref bean="myTrigger"/>
</list>
</property>
</bean>
可以定义多个job,也可以定义多个触发器trigger,和一个类似大家感兴趣可以自己多配置几个玩玩。
三.测试结果:
我的cron表达式是每分钟执行一次,打印当前时间。
四:小结
自己小菜鸟,此篇也只是自己demo测试,分享给大家。其实Quartz还有一些更复杂的使用,例如多个job一起,如何去管理,出现异常怎么处理。大家想了解可以自己去试试,网上资料很多的,谢谢大家!