前言
上一篇博文介绍了定时任务框架Quartz的使用方法,Quartz定时任务框架功能强大,使用简单,本文继续介绍在Spring中使用Quartz,本文步骤详细,按步骤操作即可,欢迎学习。
Spring集成Quartz步骤
一、环境搭建
同样首先需要引入Quartz相关依赖jar包和Spring集成的相关依赖
<!--quartz相关依赖-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
<!--Spring Quartz依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
二、定义任务内容
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;
/**
* 定义要执行的任务内容
*/
public class MyQuartzJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//输出系统当前时间
System.err.println("系统当前时间为+"+new Date());
}
}
三、resources下创建spring-quartz.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--创建JobDetail-->
<bean id= "jobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<!--指定任务类-->
<property name="jobClass" value= "com.hbc.springboot.quartz.MyQuartzJob"></property>
<!--当Job在没有可以使用的trigger的情况下 不删除-->
<property name="durability" value="true"></property>
</bean>
<!--注意spring quartz整合 一个trigger只可以绑定一个JobDetail 一个jobDetail可以被多个Trigger所使用-->
<bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--绑定JobDetail-->
<property name="jobDetail" ref="jobDetail"></property>
<property name= "cronExpression" value="0-30 * * * * ?"></property>
</bean>
<bean id="trigger1"
class= "org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<!--绑定JobDetail-->
<property name="jobDetail" ref="jobDetail"></property>
<property name="cronExpression" value="45-55 * * * * ?"></property>
</bean>
<!--注册trigger -->
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name= "triggers">
<list>
<ref bean= "trigger"></ref>
<ref bean= "trigger1"></ref>
</list>
</property>
</bean>
</beans>
配置文件中注释详细,有几点需要注意:
一个JobDetail可以有多个Job:既然通过Jobdetail去管理job,那我们就可以同时完成多个任务。
一个trigger只可以绑定一个JobDetail 一个jobDetail可以被多个Trigger所使用
另一种方式:
上面的job是通过实现execute方法完成的。还有另一种方式可以不需要实现execute方法,可以通过属性targetMethod指定执行方法,但是需要注意这个jobDetail它是使用MethodInvokingJobDetailFactoryBean作为具体实现:
xml文件中修改:
<!--注入job-->
<bean id="MyQuartzJob" class="com.hbc.springboot.quartz.MyQuartzJob"></bean>
<!--创建JobDetail-->
<bean id= "jobDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<!--指定任务类-->
<property name="targetObject" ref="MyQuartzJob"></property>
<!--指定方法->
<property name="targetMethod" value="testQuartzJob"></property>
</bean>
测试类
/**
* 定义要执行的任务内容
*/
public class MyQuartzJob {
public void testQuartzJob(){
//输出系统当前时间
System.err.println("系统当前时间为+"+new Date());
}
}
四、测试
我们可以启动Spring工厂进行测试
package com.hbc.springboot.quartz;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringQuartzTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext classPathXmlApplicationContext
= new ClassPathXmlApplicationContext("spring-quartz.xml");
}
}
五、测试结果
如图:
总结
Spring与Quartz集成非常简单,注意文中所提到的一些问题即可,在配置文件中做出相应配置,即可集成成功,之后将继续介绍Quartz的存储方式等知识。