Spring+Quartz的定时器使用

Spring+Quartz的定时器使用

1、引入依赖

<properties>
      <!-- spring版本号 -->
      <spring.version>5.0.2.RELEASE</spring.version>
      <failOnMissingWebXml>false</failOnMissingWebXml>
  </properties>
<!-- spring核心包 -->
<dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.1.1</version>
    </dependency>
 <!-- spring核心包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

2、 编写任务类

Spring与Quartz的结合使用,其任务类有两种方式——任务类继承QuartzJobBean类、任务类不继承特定类。

任务类继承QuartzJobBean类,需要重写executeInternal方法:


package org.my.SpringQuartz;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class SpringQuartzJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { 
        SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("这是SpringQuartzJob定时任务...任务类继承QuartzJobBean,当前时间:"+sdf.format(new Date()));  
    }
}

或者
任务类不继承特定类,POJO,方法名自定义:

package org.my.SpringQuartz;
import java.text.SimpleDateFormat;
import java.util.Date;
public class NotExtendSpringQuartzJob {
    public void dosomething(){
        SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("这是NotExtendSpringQuartzJob定时任务...任务类不继承特定类,是POJO,现在时间:"+sdf.format(new Date()));
    }
}

3、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" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-4.0.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 定时任务配置(任务类继承特定的类) 开头 -->
    <!-- 定时任务bean,任务执行类 -->
    <bean name="springQuartzJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean" >
        <property name="jobClass" value="org.my.SpringQuartz.SpringQuartzJob" />
        <!-- 任务类的属性map,可以设置参数,我这里没有属性 -->
        <!-- <property name="jobDataAsMap">
            <map>
            <entry key="timeout" value="0" />
            </map>
        </property>   -->
    </bean>
    <!-- 任务执行类对应的触发器:第一种(按照一定的时间间隔触发) -->
    <bean name="springQuartzJobTrigger1" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="springQuartzJob" />
        <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
        <property name="repeatInterval" value="30000" /><!-- 每30秒调度一次 -->
    </bean>
    <!-- 任务执行类对应的触发器:第二种(按照指定时间触发,如每天12点) -->
    <bean name="springQuartzJobTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="springQuartzJob" />
        <!-- 每天21:37运行一次 -->
        <property name="cronExpression" value="0 37 21 * * ?" />
    </bean>
    <!-- 调度工厂 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
        <list>
            <ref bean="springQuartzJobTrigger1" />
            <ref bean="springQuartzJobTrigger2" />
        </list>
        </property>
    </bean>
<!-- 定时任务配置(任务类继承特定的类) 结尾 -->
<!-- 定时任务配置(任务类不继承特定的类)开头 -->
    <!-- 定时任务bean,任务执行类 -->
     <bean id="notExtendSpringQuartzJob"  class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject">  <!-- 指定任务类 -->
            <bean class="org.my.SpringQuartz.NotExtendSpringQuartzJob" />
        </property>
        <property name="targetMethod" value="dosomething" />  <!-- 制定任务类中的方法 -->
        <property name="concurrent" value="false" /><!-- 作业不并发调度 -->
    </bean>
    <!-- 任务执行类对应的触发器:第一种(按照一定的时间间隔触发) -->
    <bean name="notExtendSpringQuartzJobTrigger1" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
        <property name="jobDetail" ref="notExtendSpringQuartzJob" />
        <property name="startDelay" value="0" /><!-- 调度工厂实例化后,经过0秒开始执行调度 -->
        <property name="repeatInterval" value="30000" /><!-- 每30秒调度一次 -->
    </bean>
    <!-- 任务执行类对应的触发器:第二种(按照指定时间触发,如每天12点) -->
    <bean name="notExtendSpringQuartzJobTrigger2" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="notExtendSpringQuartzJob" />
        <!-- 每天21:37运行一次 -->
        <property name="cronExpression" value="0 37 21 * * ?" />
    </bean>
    <!-- 调度工厂 -->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
        <list>
            <ref bean="notExtendSpringQuartzJobTrigger1" />
            <ref bean="notExtendSpringQuartzJobTrigger2" />
        </list>
        </property>
    </bean>
<!-- 定时任务配置(任务类不继承特定的类)结尾 -->
</beans>

猜你喜欢

转载自blog.csdn.net/Artisan_w/article/details/131114525