Spring整合Quartz定时任务框架

作者: 特立独行的猪手 | 来源:发表于2016-07-07 15:13 被阅读3065次

小记:之前用Tomcat集成Quartz还用最原始的实现,需要在配置文件中配置好Quartz的相关配置以及各个Job的JobDetail和Trigger,然后定义一个Quartz的Servlet让其可以随Tomcat启动来启动调度。这里不做详述,本篇主要记录Spring整合Quartz框架的2种方式:基于配置/基于注解。

本篇主要关注Quartz的相关配置,Spring的相关配置不做赘述。

基于配置的方式
  1. 编写定时任务的job类
package me.lishuo.job;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
 * Created by lis on 16/7/6. 
*/
@Component
public class TestQuartzJob {
      public void run() {        
          System.out.println("Hello quartz! now ->" + new Date());  
      }
}

2.配置spring-quartz.xml

<?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:context="http://www.springframework.org/schema/context"
       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">

    <!-- quartz-2.x的配置 -->

    <!-- 定时任务的bean -->
    <bean id="testQuartzJob" class="me.lishuo.job.TestQuartzJob" />

    <!-- 1) 调度的配置&job的配置 -->
    <bean id="testQuartzJob_ct" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail"><ref bean="testQuartzJob_jd" /></property>
        <property name="cronExpression" value="*/5 * * * * ?" > </property>
    </bean>
    <bean id="testQuartzJob_jd"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject"> <ref bean="testQuartzJob" /> </property>
        <property name="targetMethod" value="run"> </property>
    </bean>

    <!-- 3) 开启定时任务-->
    <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="testQuartzJob_ct"/>
            </list>
        </property>
    </bean>

基于配置的方式,需要在配置文件中详细配置任务类bean、CronTigger以及JobDeail。并且要在JobDeail指定定时任务的targetMethod方法名,即定时任务运行的方法。

基于注解的方式

  1. 编写定时任务的job类
package me.lishuo.job;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * Created by lis on 16/7/6.
 */
@Component
public class TestQuartzJob {
    @Scheduled(cron = "*/1 * * * * ?")
    public void run() {
        System.out.println("Hello quartz! now ->" + new Date());
    }
}
  1. 注解方式的配置spring-quartz.xml
<?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:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:task="http://www.springframework.org/schema/task"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/task
    http://www.springframework.org/schema/task/spring-task-3.0.xsd">

    <!-- task任务扫描注解 -->
    <task:annotation-driven/>
    <!-- 扫描位置 -->
    <context:component-scan base-package="me.lishuo.job"/>
</beans>

如果定时任务有很多的话,采用注解方式就带来便捷了,还需要在定时任务运行的方法中加上@Scheduled注解并指定cron等配置即可。

RUN

配置好之后,可以启动web项目,就可以查看运行结果了,我的测试定时任务1s执行一次,如下:


运行结果.png

Tips

以上,定时任务用Quartz实现的话,比较灵活。但如果你的定时任务不复杂的话,也可以使用Linux cronJob,更加简单方便。

相关文章

网友评论

    本文标题:Spring整合Quartz定时任务框架

    本文链接:https://www.haomeiwen.com/subject/ralljttx.html