使用Spring的Quartz Scheduler进行任务定时调度
2017-02-16 09:47
661 查看
使用Spring的Quartz Scheduler进行任务定时调度,使任务定时启动和触发,对应Spring文档 33.6Using the Quartz Scheduler 部分。
然后添加依赖,pom.xm代码如下:
MyJob测试类中设置一个data数字,每次调用addData()数字加一,代码如下:
在web.xml对Spring配置文件进行初始化:
然后配置MethodInvokingJobDetailFactoryBean,目的是指定要执行的任务对应的类及方法等内容:
配置后spring配置文件如下:
一、准备工作
首先使用maven配置webapp项目,目录结构如下,新建myJob测试类及Sping配置文件。然后添加依赖,pom.xm代码如下:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>SpringDemo</groupId> <artifactId>SpringDemo</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>SpringDemo Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId< f552 /span>> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-web --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>4.2.6.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz --> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.1</version> </dependency> </dependencies> <build> <finalName>SpringDemo</finalName> </build> </project>
MyJob测试类中设置一个data数字,每次调用addData()数字加一,代码如下:
import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Created by jutal on 17-2-15. * Spring web项目触发器配置实例 */ public class MyJob { private int myData; public void addData() { myData ++; System.out.println("Now my data is: " + myData); } public int getMyData() { return myData; } public void setMyData(int myData) { this.myData = myData; } }
在web.xml对Spring配置文件进行初始化:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <!-- needed for ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext*.xml</param-value> </context-param> <!-- Bootstraps the root web application context before servlet initialization --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app>
二、配置Job
之后要配置Job,即要定时执行的任务。首先在Spring配置文件中配置MyJob的Bean,设置myData初始为0:<bean id="myJobBean" class="MyJob"> <property name="myData" value="0"/> </bean>
然后配置MethodInvokingJobDetailFactoryBean,目的是指定要执行的任务对应的类及方法等内容:
<bean id="addDataJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 指定执行的bean --> <property name="targetObject" ref="myJobBean"/> <!-- 指定执行的方法 --> <property name="targetMethod" value="addData"/> <!-- 指定是否允许并发,false为非并发 --> <property name="concurrent" value="false"/> </bean>
三、配置Tirgger和Scheduler
在配置完Job后对Job的触发器Trigger和调度器Scheduler进行配置,其中触发器中要对执行的时间进行配置,使用了con表达式,关于此表达式的用法可以在另一篇博客《con表达式用法》中找到。配置文件如下:<!-- 配置Trigger触发器 --> <bean id="addDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="addDataJob"/> <!-- 每秒执行一次 --> <property name="cronExpression" value="0/1 * * * * ?"/> </bean> <!-- 配置Scheduler调度器 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="addDataTrigger"/> </list> </property> </bean>
配置后spring配置文件如下:
<?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">
<bean id="myJobBean" class="MyJob"> <property name="myData" value="0"/> </bean>
<!-- 配置Job -->
<bean id="addDataJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <!-- 指定执行的bean --> <property name="targetObject" ref="myJobBean"/> <!-- 指定执行的方法 --> <property name="targetMethod" value="addData"/> <!-- 指定是否允许并发,false为非并发 --> <property name="concurrent" value="false"/> </bean>
<!-- 配置Trigger触发器 --> <bean id="addDataTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="addDataJob"/> <!-- 每秒执行一次 --> <property name="cronExpression" value="0/1 * * * * ?"/> </bean> <!-- 配置Scheduler调度器 --> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="addDataTrigger"/> </list> </property> </bean>
</beans>
四、 测试
将项目放到Tomcat服务器上运行,在控制台中会出现结果,每秒进行一次输出:相关文章推荐
- 在Spring中使用Quartz进行任务调度
- 在Spring中使用Quartz进行任务调度(6)
- Spring中使用CronTrigger进行任务调度
- 在Spring中使用Quartz进行任务调度
- 在spring中使用quartz进行任务调度遇到的问题
- spring 3 中使用注解的方式来进行任务调度。
- spring 使用注解来调度定时任务
- 使用spring的 scheduled的注解进行定时任务
- spring 3 中使用注解的方式来进行任务调度。
- 任务调度5-------Spring中使用timetask执行定时任务
- spring 3 中使用注解的方式来进行任务调度
- 在Spring中使用Quartz进行任务调度(2)
- 在Spring中使用Quartz进行任务调度(3)
- 在Spring中使用Quartz进行任务调度
- spring 3 中使用注解的方式来进行任务调度
- 在Spring中使用Quartz进行任务调度(4)
- 在Spring中使用Quartz进行任务调度
- 在spring中使用quartz进行任务调度遇到的问题
- spring 使用注解来调度定时任务
- spring 3 中使用注解的方式来进行任务调度。