spring整合quartz定時任務(附demo)(二)

源碼下載地址:https://gitee.com/seek412/quartz02.git
上一章節:Quartz定時任務(附demo)(一)中我們介紹瞭如何利用quartz創建一個普通的定時任務,本文將介紹spring與quartz的整合,讓服務器啓動時就運行定時任務

項目結構如下圖:
項目結構圖

步驟1:引入依賴包

<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         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>com.demo</groupId>
    <artifactId>quartz02</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>quartz02 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>

        <!-- spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!-- spring jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>

        <!-- spring面向切面編程 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.3.7.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>3.2.4.RELEASE</version>
        </dependency>
        <!-- quartz-->
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>1.8.5</version>
        </dependency>

    </dependencies>
    <build>
        <finalName>quartz02</finalName>
        <!-- 指定編譯版本1.7 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
        <!-- 使用的idea,由於idea編譯的時候不會把src/main/java中的xml文件編譯的class中,需要添加下面語句,eclipse則不用 -->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

注意事項:

  1. spring3.1以下的版本必須使用quartz 2以下的版本,spring 3.1以上的版本必須使用quartz 2以上的版本,否則會報錯
  2. 如果項目中同時使用了shiro框架,在引入shiro依賴包的時候需要排除quartz包,否則會報錯,如下:
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-quartz</artifactId>
    <version>1.2.5</version>
    <!-- 解決 shiro和quartz 衝突-->
    <exclusions>
        <exclusion>
            <groupId>org.opensymphony.quartz</groupId>
            <artifactId>quartz</artifactId>
        </exclusion>
    </exclusions>
</dependency>

步驟2:創建定時任務

創建定時任務A

package com.demo.schedule;

/**
 * 定時任務A
 * @author: admin
 * @date: Created in 2017/10/26
 */
public class QuartzJobA {
    public void jobA(){
        System.out.println("執行定時任務A...");
    }
}

創建定時任務B

package com.demo.schedule;

/**
 * 定時任務B
 * @author : admin
 * @date : Created in 2017/10/26
 */
public class QuartzJobB {
    public void jobB(){
        System.out.println("執行定時任務B...");
    }
}

步驟3:添加spring配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- 8. quartz配置 -->
    <!-- class文件對應定時任務的路徑,如果有多個定時任務就配置多個 -->
    <bean id="quartzJobA" class="com.demo.schedule.QuartzJobA"/>
    <bean id="quartzJobB" class="com.demo.schedule.QuartzJobB"/>


    <bean id="jobDetailA" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <!-- 這裏的name必須是targetObject和targetMethod -->
        <property name="targetObject" ref="quartzJobA"/>
        <property name="targetMethod" value="jobA"/>
    </bean>

    <bean id="jobDetailB" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="quartzJobB"/>
        <property name="targetMethod" value="jobB"/>
    </bean>

    <!-- 定義觸發的條件 -->
    <bean id="jobTriggerA" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <!-- 這裏的name必須是jobDetail和cronExpression -->
        <property name="jobDetail" ref="jobDetailA"/>
        <!-- 每隔5秒執行一次 -->
        <property name="cronExpression" value="0/5 * * * * ?"/>
    </bean>
    <bean id="jobTriggerB" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetailB"/>
        <property name="cronExpression" value="0/5 * * * * ?"/>
    </bean>
    <!-- 總管理類,如果將lazy-init='false',那麼容器啓動就會執行調度程序 -->
    <bean id="startQuartz" lazy-init="false" autowire="no"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="jobTriggerA"/>
                <ref bean="jobTriggerB"/>
            </list>
        </property>
    </bean>
</beans>

配置文件中對應關係如下
這裏寫圖片描述

步驟4:配置web.xml文件

<!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>
    <!-- 1. 啓動spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!--配置一個上下文加載的監聽器-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
</web-app>

啓動tomcat服務器,控制檯輸入如下結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章