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/beanshttp://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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373691.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373691.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373691.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript學習隨記——數組二

數組indexOf(arg) 和 lastIndexOf(arg)方法使用 <script type"text/javascript" charset"utf-8">/*** indexOf(arg):返回指定參數在數組中的索引位置&#xff08;從前往后查&#xff0c;比較是使用 ‘’&#xff0c;查詢到立即返回索引位置&#xff…

反射的簡單應用

首先有一個類 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;6 7 namespace ConsoleApplication18 {9 public class demo 10 { 11 public string name "程序員"; 12…

JavaFX 2.0示例介紹書

我最近完成了有關JavaFX 2.0 SDK新版本的書的編寫&#xff0c;并且已經將它放在您附近的書店&#xff08; Amazon &#xff09;的書架上。 該書將逐步指導您完成JavaFX 2.0的來龍去脈。 當您遇到一章時&#xff0c;將看到一些菜譜&#xff0c;這些菜譜將帶來一個問題&#xff0…

雙縱坐標的繪圖命令_工程師繪圖必備軟件——OriginLab 2019b

點擊右上角關注&#xff0c;盡享后續精品軟件OriginLab 2019b是OriginLab OriginPro 2019版本的加強版&#xff0c;這個軟件對于許多人來講并不陌生&#xff0c;可以說是科學家和工程師的繪圖必備軟件。新的版本也帶來許多改變&#xff0c;軟件擁有多種功能&#xff0c;這個版本…

JavaScript學習隨記——對象

JS中對象基本使用 <script type"application/javascript" charset"utf-8">//Objcet 所有類的基礎類/*** 創建對象方式一*/ // var objnew Objcet();/** 創建對象方式二,注意 {}不可忘記寫* */var obj {};obj.name "什碼情況";obj.age …

[轉]Java_List元素的遍歷和刪除

原文地址:http://blog.csdn.net/insistgogo/article/details/19619645 1、創建一個ArrayList [java] view plainList<Integer> list new ArrayList<Integer>(); 2、List常用的遍歷方法有三種&#xff1a; &#xff08;1&#xff09;下標循環 [java] view plainfo…

分層設計 --java中的幾種包

對于剛接觸包分層的同學&#xff0c;下面簡單介紹一下java中各個層次&#xff1a; Modle 模型層 &#xff1a;存放你的實體類 dao&#xff1a;主要做數據庫的交互工作&#xff0c;具體的增刪改查等方法&#xff0c;操作數據庫的&#xff1b;這里也可以存放查詢所有的信息接口 …

Spring遠程支持和開發RMI服務

Spring遠程支持簡化了啟用遠程服務的開發。 當前&#xff0c;Spring支持以下遠程技術&#xff1a;遠程方法調用&#xff08;RMI&#xff09;&#xff0c;HTTP調用程序&#xff0c;Hessian&#xff0c;Burlap&#xff0c;JAX-RPC&#xff0c;JAX-WS和JMS。 遠程方法調用&#xf…

cesium繪制網格_Cesium學習筆記-工具篇37-風場繪制

這兩天重新接觸到流場&#xff0c;于是研究下&#xff0c;在大牛們的輪子上也算實現了效果&#xff1a;1二維2三維主要參考以下三篇文章&#xff1a;《WebGL風向圖》給出制作風向圖通常步驟&#xff1a;1. 在屏幕上生成一系列隨機粒子位置并繪制粒子。2. 對于每一個粒子&#x…

ToString:身份哈希碼的十六進制表示形式

我以前在方便的Apache Commons ToStringBuilder上寫過博客&#xff0c;最近有人問我&#xff0c;在生成的String輸出中出現的看似神秘的文本是什么構成的。 詢問該問題的同事正確地推測出他正在查看的是哈希碼&#xff0c;但與他實例的哈希碼不匹配。 我解釋說ToStringBuilder將…

HTML+CSS筆記 CSS中級 縮寫入門

盒子模型代碼簡寫回憶盒模型時外邊距(margin)、內邊距(padding)和邊框(border)設置上下左右四個方向的邊距是按照順時針方向設置的&#xff1a;上右下左。語法:margin:10px 15px 12px 14px;/*上設置為10px、右設置為15px、下設置為12px、左設置為14px*/通常有三種縮寫的方法:1、…

JavaScript學習隨記——常見全局對象屬性及方法

<script type"text/javascript" charset"utf-8">//全局對象&#xff1a; Object、Array、Math等/*** 全局的方法&#xff1a;* 1.encodeURI、escape、decodeURIComponet 編碼* 2.decodeURI、unescape、encodeURIComponet 解碼* 3.parseInt、parseF…

spring boot 定時任務

package com.ict.conf; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled;Configuration EnableScheduling // 啟用定時任務 …

搬運機器人舉杯賀所需的條件_智能搬運機器人比賽規則

附件4&#xff1a;分揀機器人(智能搬運機器人)比賽規則1、比賽目的設計一個輪式或人形小型機器人&#xff0c;在比賽場地里移動&#xff0c;將不同顏色、形狀或者材質的物體分類搬運到不同的對應位置。比賽的記分根據機器人將物體放置的位置精度和完成時間來決定分值的高低。它…

我們多么想要新的Java日期/時間API?

當前的Java.net 民意測驗問題是&#xff1a;“ 對于用Java 8實現的JSR-310&#xff08;新的日期和時間API&#xff09;有多重要&#xff1f; ”在我撰寫本文時&#xff0c;將近150位受訪者投了贊成票&#xff0c;絕大多數人回答“非常”&#xff08;53&#xff05;&#xff09;…

JavaScript學習隨記——Function

每個函數都是Function類型的實例&#xff0c;而且都與其他引用類型一樣具有屬性和方法。由于函數是對象&#xff0c;因此函數名實際上也是一個指向函數對象的指針&#xff0c;不會于某個函數綁定。 函數的定義方式 <script type"text/javascript" charset"ut…

登錄id 黑蘋果_黑蘋果MacOSCatalina無法登錄AppStore修復

先上圖&#xff1a;慘紅色的提示信息&#xff0c;把你拒之App Store門外&#xff0c;但是對之放棄、不與之斗爭不是我們的節奏&#xff0c;請看破敵攻略&#xff1a;1.查看你的“關于本機”-->“概覽”-->“系統報告”&#xff0c;如圖&#xff1a;找到你的“網絡”-->…

我們三十以后才明白

當我們懂得珍惜時光的時候,已經發現自己不再年輕. 三十歲,才慢慢的明白. 男女三十而立&#xff0c;三十歲應該是人生的轉折點&#xff0c;它不是青春韶華的終結&#xff0c;而是生命的第二起跑線。 三十歲&#xff0c;面對的不應該是沒落&#xff0c;而是認知的新起點。很多曾…

Web開發的入門指導

Web開發的入門指導web開發編程技術你點開此文&#xff0c;說明你對Web開發是有興趣的&#xff0c;或者你正在思考開始學習Web開發。在這里&#xff0c;我會告訴你成為一名Web開發者的路線&#xff0c;是對初學者關于Web開發的指導。這篇文章不會教你如何寫代碼&#xff0c;而是…

新東方mti百科知識pdf_20南航翻碩mti初試417上岸經驗貼

南京航空航天大學mti初試417分排名第一:?基礎英語88:1&#xff0c;外刊閱讀:從2月到6月開始一直打卡外刊app&#xff0c;友鄰優課&#xff0c;流利閱讀等2&#xff0c;背單詞:扇貝單詞app&#xff0c;新東方專八單詞綠皮書&#xff0c;華研專八單詞等3&#xff0c;星火專八閱讀…