您的位置:首页 > 编程语言 > Java开发

使用Spring的Quartz Scheduler进行任务定时调度

2017-02-16 09:47 661 查看
使用Spring的Quartz Scheduler进行任务定时调度,使任务定时启动和触发,对应Spring文档 33.6Using the Quartz Scheduler 部分。

一、准备工作

首先使用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服务器上运行,在控制台中会出现结果,每秒进行一次输出:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: