1. 程式人生 > >Java中JOB介紹與Spring中JOB的配置

Java中JOB介紹與Spring中JOB的配置

1定時器的作用 
在實際的開發中,如果專案中需要定時執行或者需要重複執行一定的工作,定時器顯現的尤為重要。 
當然如果我們不瞭解定時器就會用執行緒去實現,例如: 
package org.lzstone.action 
public class FinanceAction extends Thread{ 
       private Date date; 
       public void run{ 
       try{ 
       while(true){ 
       Thread.sleep((int)(Math.random()*1000)); 
       date = new Date(); 

       //定時執行任務 
       } 
       }catch(Exception e){ 
        e.printStackTrace(); 
       } 


自己實現定時器的工作很複雜,如果實現不好佔用記憶體過多,系統就此Over,所以處理定時執行或者重複執行的任務,定時器是很好的選擇 
2.java中常見的定時器 
1)藉助Java.util.Timer來實現 
2)OpenSymphony社群提供的Quartz來實現 
3.介紹Timer 
利用Timer開發定時任務是主要分為兩個步驟: 
1)建立定時任務類 
示例程式碼: 
package org.lzstone.action 

import java.util.TimeTask 
public class LzstoneTimeTask extends TimeTask{ 
       public void run(){ 
              //執行的定時器任務 
       } 

2)執行定時任務,執行定時任務分為兩種方式: 
2.1)程式直接啟動 
示例程式碼: 
package org.lzstone.action 
public class LzstoneMain{ 
       ....... 
       public void run(){ 
        //執行定時器的任務 
        //建立例項 
        Timer timer = new Timer(); 

        引數: 
        new LzstoneTimeTask()- 所要安排的任務。 
        0- 執行任務前的延遲時間,單位是毫秒。 
        1*1000- 執行各後續任務之間的時間間隔,單位是毫秒。 
        timer.schedule(new LzstoneTimeTask(),0,1*1000); 
       } 

2.2)web監聽方式 
示例程式碼: 
package org.lzstone.action 
public class LzstoneMain implements ServletContextListener{ 
       private Timer timer = null; 
       //初始化監聽器,建立例項,執行任務 
       public void contextInitialized(ServletContextEvent event){ 
               timer = new Timer(); 
               timer.schedule(new LzstoneTimeTask(),0,1*1000); 
       } 
       //銷燬監聽器,停止執行任務 
       public void contextDestroyed(ServletContextEvent event){ 
              //注意,在此計時器呼叫的計時器任務的 run 方法內呼叫此方法,就可以絕對確保正在執行的任務是此計時器所執行的最後一個任務。 
              timer.cancel(); 
        } 

web.xml配置 
<listener> 
   <listener-class> 
        org.lzstone.action.LzstoneMain 
   </listener-class> 
</listener> 
4. 介紹Quartz 
Quartz是OpenSymphony開源組織在Job scheduling領域又一個開源專案,可以用來建立簡單或者複雜的定時任務,利用Quartz開發定時任務的步驟與Timer類 

似。 

利用Quartz開發定時任務是主要分為兩個步驟: 
1)建立定時任務類 
示例程式碼: 
package org.lzstone.action 
public class LzstoneTimeTask implements Job{ 
       public void execute(JobExecutionContext context) throws JobExecutionException{ 
              //執行的定時器任務 
       } 

2)執行定時任務,執行定時任務分為兩種方式: 
2.1)程式直接啟動,建立任務排程器及配置相應的任務計劃 
示例程式碼: 
package org.lzstone.action 
public class LzstoneMain{ 
       private static Scheduler sched; 
       public static void run() throws Exception{ 
              //建立LzstoneTimeTask的定時任務 
              JobDetail jobDetail = new JobDetail("lzstoneJob",sched.DEFAULT_GROUP,LzstoneTimeTask.class); 
              //目標 建立任務計劃 
              CronTrigger trigger = new CronTrigger("lzstoneTrigger","lzstone","0 0 12 * * ?"); 
              //0 0 12 * * ? 代表每天的中午12點觸發 
              sched = new org.quartz.impl.StdSchedulerFactory().getScheduler(); 
              sched.scheduleJob(jobDetail,trigger); 
              sched.start(); 
       } 
       //停止 
       public static void stop() throws Exception{ 
              sched.shutdown(); 
        } 

//執行 
public class Main{ 
       ............. 
       public void run(){ 
            LzstoneMain.run(); 
       } 
       ............ 

2.2)web監聽方式 
示例程式碼: 
package org.lzstone.action 
public class LzstoneMainListener implements ServletContextListener{ 
       private Timer timer = null; 
       //初始化監聽器,建立例項,執行任務 
       public void contextInitialized(ServletContextEvent event){ 
               LzstoneMain.run(); 
       } 
       //銷燬監聽器,停止執行任務 
       public void contextDestroyed(ServletContextEvent event){ 
              LzstoneMain.stop(); 
        } 

web.xml配置 
<listener> 
   <listener-class> 
        org.lzstone.action.LzstoneMainListener 
   </listener-class> 
</listener> 
5.對比 
Timer方式實現定時器,原理簡單,實現方便,在執行簡單的任務比較方便,不足之處是無法確定執行時間,並且依賴性比較強,必須繼承指定的類 
Quartz方式實現定時器,方便,清晰指定啟動時間,定時引數比較靈活,容易實現比較複雜的定時任務,不足之處是需要實現特定介面,載入其框架 
兩種方式各有優缺點,在特定場合可以根據其特點選擇使用。 
6.Spring定時任務 
Spring定時任務對Timer與Quartz都提供了支援,並且實現步驟基本一樣 
首先配置Spring對Timer的支援 
1.1 建立定時任務類 
package org.lzstone.action 
import java.util.TimeTask 
public class LzstoneTimeTask extends TimeTask{ 
       public void run(){ 
              //執行的定時器任務 
       } 

1.2 註冊定時任務類,配置任務計劃與任務排程器 
    在專案的WEB-INF下面建立TimerConfig.xml檔案 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
<bean> 
<!--註冊定時執行任務實體--> 
<bean id="lzstoneTimeTask" class="org.lzstone.action.LzstoneTimeTask"/> 
<!--註冊定時器資訊--> 
<bean id="taskInfo" class="org.springframework.scheduling.timer.ScheduledTimerTask"> 
<!--第一次執行任務前需要等待的時間,這裡設定為3秒--> 
<property name="delay"> 
<value>3000</value> 
</property> 
<!--設定任務的執行週期 這裡設定為4秒--> 
<property name="period"> 
  <value>4000</value> 
</property> 
<!--設定具體執行的任務 這裡設定為lzstoneTimeTask--> 
<property name="timerTask"> 
<ref local="lzstoneTimeTask"/> 
</property> 
</bean> 
<!--配置定時器任務的排程器--> 
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"> 
<!--註冊定時器列表--> 
<property name="scheduledTimerTasks"> 
    <list> 
        <ref local="taskInfo"/> 
        ........ 
    </list> 
</property> 
</bean> 
</beans> 
1.3 web專案中的啟動設定 
    <context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/TimerConfig.xml</param-value> 
     </context-param> 

     <listener> 
         <listener-class> 
                  org.springframework.web.context.ContextLoaderListener 
         </listener-class> 
     </listener> 
配置Spring對Quartz的支援 
2.1 建立定時任務類 
package org.lzstone.action 
public class LzstoneQuartzTask{ 
       public void execute(){ 
              //執行的定時器任務 
       } 

2.2 註冊定時任務類,配置任務計劃與任務排程器 
    在專案的WEB-INF下面建立QuartzConfig.xml檔案 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> 
<beans> 
<bean> 
<!--註冊定時執行任務實體--> 
<bean id="lzstoneQuartzTask" class="org.lzstone.action.LzstoneQuartzTask"/> 
<!--註冊定時器資訊--> 
<bean id="taskInfo" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
<!--指定要執行的定時任務類  這裡是LzstoneQuartzTask--> 
<property name="targetObject"> 
<ref local="lzstoneQuartzTask"/> 
</property> 
<!--指定定時器任務類要執行的方法名稱 這裡是execute--> 
<property name="targetMethod"> 
<value>execute</value> 
</property> 
</bean> 
<!--配置定時器任務的排程器--> 
<bean id="quartzTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> 
<!--宣告要執行的實體--> 
<property name="jobDetail"> 
    <ref local="taskInfo"/> 
</property> 
<!--設定執行時間--> 
<property name="cronExpression"> 
    <value>0 0 12 * * ?</value> 
</property> 
</bean> 
<!--註冊監聽器--> 
<bean id="registerQuartz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> 
<!--註冊定時器實體 集合--> 
<property name="triggers"> 
    <list> 
          <ref local="quartzTrigger"/> 
    </list> 
</property> 
</bean> 
</beans> 
2.3 web專案中的啟動設定 
    <context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/QuartzConfig.xml</param-value> 
     </context-param> 

相關推薦

JavaJOB介紹SpringJOB配置

1定時器的作用 在實際的開發中,如果專案中需要定時執行或者需要重複執行一定的工作,定時器顯現的尤為重要。 當然如果我們不瞭解定時器就會用執行緒去實現,例如: package org.lzstone.action public class FinanceAction extends Thread{       

定時器的實現、java定時器介紹Spring定時器的配置

1定時器的作用 在實際的開發中,如果專案中需要定時執行或者需要重複執行一定的工作,定時器顯現的尤為重要。 當然如果我們不瞭解定時器就會用執行緒去實現,例如: package org.lzstone.action public class FinanceAction exte

定時器的實現、java定時器Timer和Quartz介紹Spring定時器的配置

欄位 允許值 允許的特殊字元    秒 0-59 , - * /    分 0-59 , - * /    小時 0-23 , - * /    日期 1-31 , - * ? / L W C    月份 1-12 或者 JAN-DEC , - * /    星期 1-7 或者 SUN-SAT , - *

java的代理模式spring的AOP

1.java的代理模式 代理(proxy)是一種設計模式,是屬於23種常見設計模式中的一種。談到設計模式,我們首先想到的是設計模式的幾大原則,其中談論最多的還是單一職責和開閉原則,代理模式實現了對目標物件其他的訪問方式,即通過代理物件(proxy)訪問目標物件

TomcatSpring的事件機制詳解

Tomcat與Spring中的事件機制詳解 引言 最近在看tomcat原始碼,原始碼中出現了大量事件訊息,可以說整個tomcat的啟動流程都可以通過事件派發機制串起來,研究透了tomcat的各種事件訊息,基本上對tomcat的啟動流程也就有了一個整體的認識。在這一基礎上,聯想到之前在看spr

JavaBean,POJO的簡單理解 ,JavaBeanSpringbean的區別

本文是我查閱多篇部落格總結下來的,不過有些概念可能理解還不夠準確,歡迎大家糾錯改正。 Java的一個特性,資料與行為相分離。資料就是成員變數,行為就是setter和getter方法 JavaBean是Java中開發的可以跨平臺的重要元件,在JSP中常用來 封裝業務邏輯

spring mvcapplicationContext.xmlspring-mvc.xml的關係

前言 本文參考了: 值得注意的是,【【Spring】淺談ContextLoaderListener及其上下文與DispatcherServlet的區別】中闡述了contextLoaderListener和dispatcherServlet的關係, co

QuartzSpring整合 Job如何自動注入Spring容器託管的物件

package org.springframework.scheduling.quartz; import java.lang.reflect.Method; import org.quartz.Job; import org.quartz.Scheduler; import org.quartz.S

傳統javabeanspring的bean的區別

用處不同:傳統javabean更多地作為值傳遞引數,而spring中的bean用處幾乎無處不在,任何元件都可以被稱為bean。 寫法不同:傳統javabean作為值物件,要求每個屬性都提供getter和setter方法;但spring中的bean只需為接受設值注入的屬性提供

webservice之cxf實現[web專案基於mavenspring整合]

webservice現開發的已實現元件不少,使用過的就有xfire及cxf. cxc基於maven與spring整合過程如下: STEP 1. 依賴包新增 在pom.xml檔案的標籤中增加如下(版本號依個人需要調整): <depende

java的finalC++的const的區別

(1)final在java中定義常量,可作用於基本型別或者類型別,若是作用於類型別,則此類型別不能作為父類被繼承,也就是說它的下面不能有子類,這樣的類叫做原子類。    C++中的const定義常量,(2)Java中的final如果是對於基本型別,那和C++   const是

MockitoSpring@Autowired@InjectMocks組合

@InjectMocks @Autowired private TestClass testClass; @Mock private TestClassPropert

Spring框架context-paramservletinit-param的contextConfigLocation的區別

積累,小白也可成為大神 最近在使用spring這一個框架做定時任務的時候,發現一個問題。當我們不在瀏覽器中呼叫一下我們的介面,是不會自動執行定時檔案的,這個原因是什麼呢?剛開始的時候,使我費解了很長事件,不知道問題出現再哪裡。但是當冷靜下來思考一下的時

Windows RabbitMQ安裝環境變量配置

-s 雙擊 來安 環境 style lang 頁面 files 基礎上 RabbitMQ是一個在AMQP基礎上完整的,可復用的企業消息系統。他遵循Mozilla Public License開源協議。 1:安裝RabbitMQ需要先安裝Erlang語言開發包。下載地址 h

javaScript的onclickjquery的click區別

mce 上下 要點 let 怎樣 報錯 ron n) 屬性 來來來,先看一個例子: html部分,定義幾個按鈕 <div class="carousel-btn"> <button class="btn"></button>

Win10環境安裝Python2python3,並配置TensorFlow環境

安裝前需要知道的知識是: 1.TensorFlow只支援Python3版本 2.Python2與Python3他們預設的.exe執行檔案,名字均為:python.exe。要使他們共存必須要對他們的名字修改,否則,在win10命令框中,輸入Python命令時,會報錯“不是內部指令”。 3.安裝

虛擬機器下ubuntu檔案實現windows檔案共享

第一步  在Ubuntu選單上選擇VM->install VMware tools。然後出現VMware tools的安裝壓縮包檔案VMwareTools-9.2.0-799703.tar.gz。 第二步 可以先將該壓縮檔案複製到主資料夾下,然後解壓tar.gz

c的constc++的const

c中的const是一個偽只讀識別符號。 #include <stdio.h> #include <stdlib.h> int main() { const int a = 10; int *p = &a; *p = 20;

記錄一下我的windows上的phpstorm的thinkphp5xdebugger的除錯配置問題

常規教程不多說 1.下載對應的xdebbger並放在適當位置 2.配置phpstorm中的server,如埠等 3.配置php.ini檔案 此處有兩個重點: 1是php.ini

撩課-Java-Intellij Idea介紹安裝

idea介紹: IDEA 全稱 IntelliJ IDEA,是java語言開發整合環境 IntelliJ在業界被公認為最好的java開發工具之一 IDEA是JetBrains公司的產品 優點: 智慧程式碼助手、重構、J2EE支援、 各類版本工具(git、svn、github等)