<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗,分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
    在Spring中,使用JDK的Timer類庫來做任務(wù)調(diào)度功能不是很方便,關(guān)鍵它不可以象cron服務(wù)那樣可以指定具體年、月、日、時和分的時間。你只能將時間通過換算成微秒后傳給它。如任務(wù)是每天執(zhí)行一次,則需要在spring中如下配置:
    ­
    <bean id="scheduledTask" class= "org.springframework.scheduling.timer.ScheduledTimerTask">
    <!--程序啟動后開始執(zhí)行任務(wù)的延遲時間 -->
    <property name="delay" value="0" />
    <!--每隔一天【一天=24×60×60×1000微秒】執(zhí)行一次-->
    <property name="period" value="86400000" />
    <!--業(yè)務(wù)統(tǒng)計報表bean -->
    <property name="timerTask" ref="businessReport" />
    </bean>
    ­
    其中period就是一天的微秒數(shù)。如果每月1日運行一次,那就復(fù)雜了,不知如何配置。因為月份有大、小月之分,每月的微秒數(shù)都不一樣。
    ­
    而Quartz類庫不但有著上述JDK的Timer類庫類似的配置,更重要的,它還有著類似于unix的cron服務(wù)的配置。因此,在遷移中我們采用了Quartz類庫的接口。

    具體的步驟如下:
    1 編寫業(yè)務(wù)類,該類繼承了org.quartz.Job,主要的邏輯在execute方法中編寫

    2 配置spring的applicationContext.xml文件
        2.1 配置任務(wù)JobDetailBean
        2.2配置觸發(fā)器 CronTriggerBean
        2.3配置調(diào)度器  SchedulerFactoryBean

    3 所需要的jar包:
             spring.jar,quartz.jar,commons-logging-1.0.4.jar,commons-dbcp-1.2.2.jar,commons-pool-1.3.jar

    4 把quartz.properties放到類路徑下

    以下為一個demo

    業(yè)務(wù)類:

    Java代碼

     

    package task;   
      
    import java.util.Date;   
      
    import org.quartz.JobExecutionContext;   
    import org.quartz.JobExecutionException;   
      
    public class BusinessReport implements org.quartz.Job{   
          
    public void perform()//執(zhí)行報表統(tǒng)計入口函數(shù)   
                
    //業(yè)務(wù)邏輯   
              System.out.println("開始執(zhí)行報表的業(yè)務(wù)邏輯了----現(xiàn)在的時間是--"+new Date());   
                 
            }
       
      
        
    public void execute(JobExecutionContext arg0) throws JobExecutionException {   
            perform();   
               
        }
       
      
    }
       

    applicationContext.xml文件

     三 quartz.properties文件的內(nèi)容(默認放在類路徑下)
    #============================================================================
    # Configure Main Scheduler Properties 
    #============================================================================
    org.quartz.scheduler.instanceName = DefaultQuartzScheduler
    org.quartz.scheduler.instanceId = AUTO
    org.quartz.scheduler.rmi.export = false
    org.quartz.scheduler.rmi.proxy = false
    org.quartz.scheduler.wrapJobExecutionInUserTransaction = false

    #============================================================================
    # Configure ThreadPool 
    #============================================================================
    #org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
    org.quartz.threadPool.threadCount = 10
    org.quartz.threadPool.threadPriority = 5
    #org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true

    #============================================================================
    # Configure JobStore 
    #============================================================================
    #org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
    #org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
    org.quartz.jobStore.misfireThreshold = 60000
    #org.quartz.jobStore.useProperties = false
    #org.quartz.jobStore.tablePrefix = QRTZ_
    #org.quartz.jobStore.dataSource = myDS

    #org.quartz.jobStore.isClustered = true
    #org.quartz.jobStore.clusterCheckinInterval = 15000

    #============================================================================
    # Configure DataSource
    #============================================================================
    org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
    org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost/test
    org.quartz.dataSource.myDS.user = root
    org.quartz.dataSource.myDS.password = root
    org.quartz.dataSource.myDS.maxConnections = 10


    附:cronExpression表達式解釋:
    0 0 12 * * ?---------------在每天中午12:00觸發(fā)
    0 15 10 ? * *---------------每天上午10:15 觸發(fā)
    0 15 10 * * ?---------------每天上午10:15 觸發(fā)
    0 15 10 * * ? *---------------每天上午10:15 觸發(fā)
    0 15 10 * * ? 2005---------------在2005年中的每天上午10:15 觸發(fā)
    0 * 14 * * ?---------------每天在下午2:00至2:59之間每分鐘觸發(fā)一次
    0 0/5 14 * * ?---------------每天在下午2:00至2:59之間每5分鐘觸發(fā)一次
    0 0/5 14,18 * * ?---------------每天在下午2:00至2:59和6:00至6:59之間的每5分鐘觸發(fā)一次
    0 0-5 14 * * ?---------------每天在下午2:00至2:05之間每分鐘觸發(fā)一次
    0 10,44 14 ? 3 WED---------------每三月份的星期三在下午2:00和2:44時觸發(fā)
    0 15 10 ? * MON-FRI---------------從星期一至星期五的每天上午10:15觸發(fā)
    0 15 10 15 * ?---------------在每個月的每15天的上午10:15觸發(fā)
    0 15 10 L * ?---------------在每個月的最后一天的上午10:15觸發(fā)
    0 15 10 ? * 6L---------------在每個月的最后一個星期五的上午10:15觸發(fā)
    0 15 10 ? * 6L 2002-2005---------------在2002, 2003, 2004 and 2005年的每個月的最后一個星期五的上午10:15觸發(fā)
    0 15 10 ? * 6#3---------------在每個月的第三個星期五的上午10:15觸發(fā)
    0 0 12 1/5 * ?---------------從每月的第一天起每過5天的中午12:00時觸發(fā)
    0 11 11 11 11 ?---------------在每個11月11日的上午11:11時觸發(fā).­



    Cron 表達式包括以下 7 個字段:

      ·秒

      ·分

      ·小時

      ·月內(nèi)日期

      ·月

      ·周內(nèi)日期

      ·年(可選字段)

      Cron 觸發(fā)器利用一系列特殊字符,如下所示:

      ·反斜線(/)字符表示增量值。例如,在秒字段中“5/15”代表從第 5 秒開始,每 15 秒一次。

      ·問號(?)字符和字母 L 字符只有在月內(nèi)日期和周內(nèi)日期字段中可用。問號表示這個字段不包含具體值。所以,如果指定月內(nèi)日期,可以在周內(nèi)日期字段中插入“?”,表示周內(nèi)日期值無關(guān)緊要。字母 L 字符是 last 的縮寫。放在月內(nèi)日期字段中,表示安排在當(dāng)月最后一天執(zhí)行。在周內(nèi)日期字段中,如果“L”單獨存在,就等于“7”,否則代表當(dāng)月內(nèi)周內(nèi)日期的最后一個實例。所以“0L”表示安排在當(dāng)月的最后一個星期日執(zhí)行。

      ·在月內(nèi)日期字段中的字母(W)字符把執(zhí)行安排在最靠近指定值的工作日。把“1W”放在月內(nèi)日期字段中,表示把執(zhí)行安排在當(dāng)月的第一個工作日內(nèi)。

      ·井號(#)字符為給定月份指定具體的工作日實例。把“MON#2”放在周內(nèi)日期字段中,表示把任務(wù)安排在當(dāng)月的第二個星期一。

      ·星號(*)字符是通配字符,表示該字段可以接受任何可能的值。

    posted on 2010-07-14 10:03 rogerfan 閱讀(826) 評論(1)  編輯  收藏 所屬分類: 【開源技術(shù)】

    Feedback

    # re: 【轉(zhuǎn)】spring定時任務(wù)之quartz 2014-11-25 12:15 zuidaima
    java quartz定時任務(wù)demo教程源代碼下載:http://zuidaima.com/share_topic/k%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6-p1-s1.htm  回復(fù)  更多評論
      

    主站蜘蛛池模板: 西西人体大胆免费视频| 久久亚洲中文字幕精品有坂深雪 | 亚洲爆乳精品无码一区二区| 182tv免费视视频线路一二三| 亚洲成A人片在线观看无码不卡 | 亚洲一区二区三区偷拍女厕| 精品国产污污免费网站入口在线| 亚洲色欲久久久久综合网| 一个人看的在线免费视频| 亚洲日韩精品无码一区二区三区| 99久久99这里只有免费的精品| 国产日韩亚洲大尺度高清| 七色永久性tv网站免费看| 亚洲视频一区在线观看| 免费无码AV片在线观看软件| 亚洲乱码国产乱码精华| 午夜国产大片免费观看| 岛国精品一区免费视频在线观看| 亚洲av无码片在线播放| 13一14周岁毛片免费| 亚洲日本VA中文字幕久久道具| 国产在线98福利播放视频免费| 午夜成人无码福利免费视频| 免费在线观看的黄色网址| 国产美女亚洲精品久久久综合| 99re8这里有精品热视频免费| 亚洲综合一区二区精品导航| 99久久久国产精品免费无卡顿| 亚洲中文字幕久久精品无码VA| 国产在线播放免费| a成人毛片免费观看| 亚洲人成电影院在线观看| 日韩a级毛片免费观看| 国产99久久久久久免费看| 亚洲国产日韩在线成人蜜芽| 国产大片91精品免费观看男同| 天堂在线免费观看| 亚洲一级特黄特黄的大片| 亚洲午夜精品第一区二区8050| 亚洲精品视频在线免费| 菠萝菠萝蜜在线免费视频|