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

来源:互联网 发布:桥接的网络不稳定 编辑:程序博客网 时间:2024/06/03 19:09

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

0 0
原创粉丝点击