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

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

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

    菜園子

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      7 Posts :: 1 Stories :: 31 Comments :: 0 Trackbacks

    在我們開發的一個系統中,有定時任務,自然就想到了Quartz,由于框架采用的Spring,Quartz跟Spring的集成也非常簡單,所以就把Quartz配置到框架中,當系統啟動后,定時任務也就自動啟動。在開發的過程中一直沒有發現問題,但是最后上線的時候,采用的是weblogic cluster,啟動了4個節點,發現有的定時任務執行了不止一次,才恍然大悟,4個節點啟動了4個應用,也就啟動了4個定時任務,所以在同一個時間定時任務執行了不止一次。去網上搜索,發現Quartz也支持cluster,但是我覺得就我們的系統而言,沒有必要采用cluster的定時任務,也許是比較懶吧,就想讓定時任務只執行一次。在網上搜到了robbin的一篇文章(http://robbin.iteye.com/blog/40989 ),發現把quartz集中到webapp當中還是有一定的風險,同時同一個時間點執行也不止一次。Robbin的解決辦法就是自己單獨啟動一個Job Server,來quartz跑job,不要部署在web容器中。 

    我也比較同意這個辦法。鑒于時間比較緊,就想有沒有比較方便的方法。其實把原來的webapp當做一個quartz的容器就可以了。可以自己寫一個線程來跑應用,再寫一個command啟動這個線程就可以了。線程類很簡單,如下:

    public class StartServer {

        public static void main(String[] args) throws Exception {

            ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
    new String[] { "/spring/context-annotation.xml","/spring/context-transaction.xml",
    "/spring/context-hibernate.xml",
    "/spring/context-quartz.xml"});

            System.out.println("start server....");

            while (true) {

                try {

                    Thread.sleep(900);

                } catch (InterruptedException ex) {

                }

            }

        };

    }

    去掉了系統的controller配置servlet.xml,運行這個類就可以了。

    在web-inf目錄下寫一個command來啟動這個java類:

    setlocal ENABLEDELAYEDEXPANSION

    if defined CLASSPATH (set CLASSPATH=%CLASSPATH%;.) else (set CLASSPATH=.)

    FOR /R .\lib %%G IN (*.jar) DO set CLASSPATH=!CLASSPATH!;%%G

    Echo The Classpath definition is==== %CLASSPATH%

    set CLASSPATH=./classes;%CLASSPATH%

    java com.company.job.StartServer

    這個command需要把需要的jar(web-inf/lib中)包都放到classpath中。

    每次啟動的時候執行這個command就可以了。跟原來的應用分開了,調試起定時任務也不用影響到原來的應用,還是比較方便的。部署的時候原樣拷貝一份,然后執行這個command就好了,部署起來也比較方便。

     



    QQ:24889356
    posted on 2011-09-13 12:53 GhostZhang 閱讀(2658) 評論(3)  編輯  收藏

    Feedback

    # re: 一次定時任務 2011-09-14 08:55 tb
    恩 不錯   回復  更多評論
      

    # re: 一次定時任務 2011-09-15 18:19 Mister4
    可以根據服務器的iP做個判斷  回復  更多評論
      

    # re: 一次定時任務[未登錄] 2011-09-30 15:57 BucketLi
    這個簡單處理方式有很多. 數據庫搞張任務表,放一條記錄,每個節點先取這條記錄(任務狀態是可執行),然后再通過update將value+1并且更新狀態,帶上先前查詢出來的value作為查詢條件,這樣相當于加了一把樂觀鎖,因為數據庫底層是原子的,所以只有一臺機器會更新成功. 這樣就達到目的了. 還有稍微復雜點的是通過zk來維持一把任務鎖,這樣執行任務的只有一臺機器,掛掉后另外一臺機器搶到鎖開始做事情. 當然還有其他方法  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 麻豆一区二区免费播放网站| 亚洲AV无码成人精品区大在线| 在线亚洲高清揄拍自拍一品区| 日韩在线看片免费人成视频播放| 污网站在线观看免费| 国产成人亚洲综合无码精品| 毛片a级毛片免费播放100| 成人无码精品1区2区3区免费看| 久久夜色精品国产噜噜噜亚洲AV| 四虎影视大全免费入口| 免费无码H肉动漫在线观看麻豆| 亚洲熟女综合色一区二区三区 | 国产在线一区二区综合免费视频| 国产99在线|亚洲| 亚洲色成人中文字幕网站| 国产卡一卡二卡三免费入口| 一个人免费观看视频在线中文 | 国产91成人精品亚洲精品| 亚洲av无码一区二区三区不卡 | 国产亚洲精品精品国产亚洲综合| 亚洲精品视频免费看| av片在线观看永久免费| 精品亚洲AV无码一区二区| 亚洲国产精品福利片在线观看| 全免费a级毛片免费看无码| 18禁在线无遮挡免费观看网站| 亚洲成a人片在线观看天堂无码| 亚洲成年轻人电影网站www| 亚洲AV永久无码精品一区二区国产| 91麻豆国产免费观看| 精品国产免费一区二区三区| 亚洲国产成人精品无码区二本| 78成人精品电影在线播放日韩精品电影一区亚洲 | A级毛片成人网站免费看| 亚洲精品乱码久久久久久V| 亚洲视频免费观看| 亚洲精品无码av人在线观看| 四只虎免费永久观看| 久久这里只有精品国产免费10| 未满十八18禁止免费无码网站| 日韩在线一区二区三区免费视频 |