Spring和石英:多作业计划服务

作业调度对于应用程序来说是如此重要。 尤其是在大型项目中,处理大量工作可能是一个问题。 Spring和Quartz为解决该问题带来了巨大的好处。 本文介绍了如何通过使用Spring和Quartz轻松地计划多个作业。

二手技术:

JDK 1.6.0_21
春天3.1.1
石英1.8.5 Maven的3.0.2

步骤1:建立已完成的专案
创建一个Maven项目,如下所示。 (可以使用Maven或IDE插件创建)

步骤2:图书馆
Spring依赖项已添加到Maven的pom.xml中。

<!-- Spring 3 dependencies -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>

第3步:创建任务类别
将创建一个FirstTask类。

package com.otv.task;
 
import org.apache.log4j.Logger;
 
/**
 * First Task
 *
 * @author  onlinetechvision.com
 * @since   24 Feb 2012
 * @version 1.0.0
 *
 */
public class FirstTask {
 
    private static Logger log = Logger.getLogger(FirstTask.class);
 
    /**
     * Execute this task
     *
     */
    public void execute() {
        log.debug("FirstTask runs successfully...");
    }
}

将创建SecondTask类。

package com.otv.task;
 
import org.apache.log4j.Logger;
 
/**
 * Second Task
 *
 * @author  onlinetechvision.com
 * @since   24 Feb 2012
 * @version 1.0.0
 *
 */
public class SecondTask {
 
    private static Logger log = Logger.getLogger(SecondTask.class);
 
    /**
     * Execute this task
     *
     */
    public void execute() {
        log.debug("SecondTask runs successfully...");
    }
}

第4步:创建ISchedulerService接口
ISchedulerService接口已创建。

package com.otv.service;
 
/**
 * Scheduler Service Interface
 *
 * @author  onlinetechvision.com
 * @since   24 Feb 2012
 * @version 1.0.0
 *
 */
public interface ISchedulerService {
 
    /**
     * Execute First Task
     *
     * @param
     * @throws
     * @return
     */
    public void executeFirstTask();
 
    /**
     * Execute Second Task
     *
     * @param
     * @throws
     * @return
     */
    public void executeSecondTask();
}

步骤5:创建SchedulerService类别
SchedulerService类是通过实现ISchedulerService接口创建的。 该服务计划任务。

package com.otv.service;
 
import com.otv.task.FirstTask;
import com.otv.task.SecondTask;
 
/**
 * Scheduler Service Implementation
 *
 * @author  onlinetechvision.com
 * @since   24 Feb 2012
 * @version 1.0.0
 *
 */
public class SchedulerService implements ISchedulerService {
 
    private FirstTask  firstTask;
    private SecondTask secondTask;
 
    /**
     * Execute First Task
     *
     */
    public void executeFirstTask() {
        getFirstTask().execute();
    }
 
    /**
     * Execute Second Task
     *
     */
    public void executeSecondTask() {
        getSecondTask().execute();
    }
 
    /**
     * Get First Task
     *
     * @return FirstTask
     */
    public FirstTask getFirstTask() {
        return firstTask;
    }
 
    /**
     * Set First Task
     *
     * @param  firstTask First Task
     */
    public void setFirstTask(FirstTask firstTask) {
        this.firstTask = firstTask;
    }
 
    /**
     * Get Second Task
     *
     * @return SecondTask
     */
    public SecondTask getSecondTask() {
        return secondTask;
    }
 
    /**
     * Set Second Task
     *
     * @param  secondTask Second Task
     */
    public void setSecondTask(SecondTask secondTask) {
        this.secondTask = secondTask;
    }
}

步骤6:建立应用程式类别
应用程序类已创建。 此类运行应用程序。

package com.otv.starter;
 
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
/**
 * Application Starter Class
 *
 * @author  onlinetechvision.com
 * @since   24 Feb 2012
 * @version 1.0.0
 *
 */
public class Application {
 
    /**
     * Main method of the Application
     *
     */
    public static void main(String[] args) {
        new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

步骤7:定义作业详细信息配置
在Spring中,可以通过两种方式定义作业详细信息 。 通过使用MethodInvokingJobDetailFactoryBean或扩展QuartzJobBean 。 在此示例中,已使用MethodInvokingJobDetailFactoryBean方法。 将targetObjecttargetMethod属性提供给MethodInvokingJobDetailFactoryBean

<!-- Job Details-->
<bean id="FirstTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="SchedulerService" />
    <property name="targetMethod" value="executeFirstTask" />
</bean>
 
<bean id="SecondTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
    <property name="targetObject" ref="SchedulerService" />
    <property name="targetMethod" value="executeSecondTask" />
</bean>

步骤8:定义触发配置
在Spring中也可以通过两种方式定义触发器 。 通过定义SimpleTriggerBeanCronTriggerBean 。 使用SimpleTriggerBean时 ,将定义jobDetailrepeatIntervalstartDelay属性。 使用CronTriggerBean时 ,将定义jobDetailcronExpression属性。 在此示例中,第一个任务的重复间隔已设置为5秒 ,第二个任务的重复间隔已设置为12秒

<!-- Simple Trigger -->
<bean id="FirstSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
    <property name="jobDetail" ref="FirstTaskJobDetail" />
    <property name="repeatInterval" value="5000" />
    <property name="startDelay" value="1000" />
</bean>
 
<!-- <bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="SecondTaskJobDetail" />
        <property name="repeatInterval" value="12000" />
        <property name="startDelay" value="1000" />
    </bean> -->   
 
<!-- Cron Trigger -->
<bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
    <property name="jobDetail" ref="SecondTaskJobDetail" />
    <property name="cronExpression" value="0/12 * * * * ?" />
</bean>

步骤9:定义SchedulerFactoryBean配置
最后,通过创建SchedulerFactoryBean配置作业详细信息触发器

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="jobDetails">
       <list>
          <ref bean="FirstTaskJobDetail" />
          <ref bean="SecondTaskJobDetail" />
       </list>
    </property>
    <property name="triggers">
       <list>
          <ref bean="FirstSimpleTrigger" />
          <ref bean="SecondSimpleTrigger" />
       </list>
    </property>
</bean>

步骤10:创建applicationContext.xml
所有applicationContext.xml内容如下所示。

<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-3.0.xsd">
 
    <!-- Beans Declaration -->
    <bean id="FirstTask" class="com.otv.task.FirstTask"></bean>
    <bean id="SecondTask" class="com.otv.task.SecondTask"></bean>
 
    <bean id="SchedulerService" class="com.otv.service.SchedulerService">
        <property name="firstTask" ref="FirstTask" />
        <property name="secondTask" ref="SecondTask" />
    </bean>
 
    <!-- Job Details-->
    <bean id="FirstTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="SchedulerService" />
        <property name="targetMethod" value="executeFirstTask" />
    </bean>
 
    <bean id="SecondTaskJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="SchedulerService" />
        <property name="targetMethod" value="executeSecondTask" />
    </bean>
 
    <!-- Simple Trigger -->
    <bean id="FirstSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="FirstTaskJobDetail" />
        <property name="repeatInterval" value="5000" />
        <property name="startDelay" value="1000" />
    </bean>
<!--
    <bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
        <property name="jobDetail" ref="SecondTaskJobDetail" />
        <property name="repeatInterval" value="12000" />
        <property name="startDelay" value="1000" />
    </bean>
-->
    <!-- Cron Trigger -->
    <bean id="SecondSimpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="SecondTaskJobDetail" />
        <property name="cronExpression" value="0/12 * * * * ?" />
    </bean>
 
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="jobDetails">
           <list>
              <ref bean="FirstTaskJobDetail" />
              <ref bean="SecondTaskJobDetail" />
           </list>
        </property>
        <property name="triggers">
           <list>
              <ref bean="FirstSimpleTrigger" />
              <ref bean="SecondSimpleTrigger" />
           </list>
        </property>
    </bean>
 
</beans>

步骤11:运行项目
启动应用程序类后,将在下面显示输出日志:

25.02.2012 00:17:18 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:23 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:24 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:28 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:33 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:36 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:38 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:43 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:48 DEBUG (SecondTask.java:22) - SecondTask runs successfully...
25.02.2012 00:17:48 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:53 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:17:58 DEBUG (FirstTask.java:23) - FirstTask runs successfully...
25.02.2012 00:18:00 DEBUG (SecondTask.java:22) - SecondTask runs successfully...

步骤12:下载

OTV_SpringQuartz_MultiJobScheduling

参考: JCG合作伙伴提供的 使用Spring和Quartz的多作业计划服务   在线技术愿景博客上的Eren Avsarogullari。


翻译自: https://www.javacodegeeks.com/2012/02/spring-and-quartz-multi-job-scheduling.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值