日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ATG中的定时Job处理

發布時間:2025/3/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ATG中的定时Job处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、ATG中定時Job核心處理Module

在ATG中核心的定時Job管理是放在Schedule這個Module下的,所以如果想要在你的應用擁有定時執行Job的能力,必須要在打包腳本中包含ScheduleModule。但是在生產環境中更為常見的做法是將ScheduleModule單獨打包成為一個應用放在單獨的Server實例上,其他的應用對其訪問來觸發相應的定時Job。這樣做的好處是方便管理,也可以在一定程度上避免共享資源沖突。

二、ATG定時Job的幾個概念:

1、Scheduler組件shcedule模塊的核心服務是/atg/dynamo/service/Scheduler組件,該組件負責所有Job的跟蹤和觸發。該組件的addScheduledJob方法接收一個ScheduledJob結構,來實現對定時Job的注冊。

2、ScheduledJob結構:包含了Scheduler所需要所有參數選線的結構類。可參見下文代碼。

3、Job組件:需要開發者自定義的組件,一個實現了atg.service.scheduler.Schedulable接口的組件。所有要做的工作都可以放在performScheduledTask實現。

調用/atg/dynamo/service/Scheduler組件的addScheduledJob方法 ,即可將一個Job組件加入到Scheduler中去實現定時觸發

以下這段代碼示例:一個Job組件包裝為ScheduledJob結構傳給Scheduler。

ScheduledJob job = new ScheduledJob ("hello","Prints Hello",getAbsoluteName (),getSchedule (),ScheduleComponet,ScheduledJob.SCHEDULER_THREAD); jobId = getScheduler ().addScheduledJob (job);

注:這一段通常寫在Job組件的doStartService方法中(需繼承atg.nucleus.GenericService類),用于啟動組件時即可定時觸發。

4、Task:Job在執行過程中產生的實例,每次觸發都會產生一個Task。

Task根據運行線程的位置不同有幾種運行模式

(a)SCHEDULER_THREAD:在Scheduler的主線程上直接執行。在執行的過程中其他的定時任務無法執行。因此只適用于耗時較短的Task.

(b)SEPARATE_THREAD:另起一個單獨的線程,線程結束后立即銷毀。比較適用于那些定時間隔小于完成時間耗時的任務。例如完成一個任務大約需要5分鐘。定時間隔設置為3分鐘啟動一次。

(c)REUSED_THREAD:另起一個單獨的線程,任務結束后,任務掛起等待下一次調用。如果任務還在執行過程中,下一次調用又被觸發。此時不會新建單獨線程。

運行模式是在將job加入Scheduler時傳入的,上文代碼中ScheduledJob.SCHEDULER_THREAD即是此選項。


5、Schedule :對于定時任務執行時間的描述,即上文代碼中的getSchedule ()返回的字符串。ATG中有兩種定時方式

(a)按時間間隔:示例如下

schedule=in 30 seconds//在30秒之內執行一次 schedule=every 20 minutes//每20分鐘執行一次 (b)按照固定時間:ATG使用以空格分隔的字符串(共計6個描述單位)來表示月、日期、周、每月的第幾周、小時、分鐘。ATG官方文檔對此描述的比較細致,不贅述。只舉例如下schedule=calendar 5 . 2 * * 0//Every Monday in June, every hour on the hour schedule=calendar * * * * 9-17 30//Every day, between 9am-5pm on the half hour

三、實踐篇

1、寫一個HelloJob.java類

import atg.nucleus.*; import atg.service.scheduler.*;public class HelloJob extends GenericService implements Schedulable {public HelloJob () {}// Scheduler propertyScheduler scheduler;public Scheduler getScheduler () { return scheduler; }public void setScheduler (Scheduler scheduler){ this.scheduler = scheduler; }// Schedule propertySchedule schedule;public Schedule getSchedule () { return schedule; }public void setSchedule (Schedule schedule){ this.schedule = schedule; }// Schedulable methodpublic void performScheduledTask (Scheduler scheduler,ScheduledJob job){ System.out.println ("Hello"); }// Start methodint jobId;public void doStartService () throws ServiceException{ScheduledJob job = new ScheduledJob ("hello","Prints Hello",getAbsoluteName (),getSchedule (),this,ScheduledJob.SCHEDULER_THREAD);jobId = getScheduler ().addScheduledJob (job);}// Stop methodpublic void doStopService () throws ServiceException{getScheduler ().removeScheduledJob (jobId);} }

2、定義helloJob的配置文件,形成組件

$class=HelloJob $scope=global scheduler=/atg/dynamo/service/Scheduler schedule=every 1 minutes

3、定義該Job的啟動時機

如果選擇隨Server啟動即啟動,則需要找到你應用的Initial.properties(如果沒有在你的$ATG_INSTALL_DIR/home/localconfig可以創建一個),文件內容如下:

initialServices+=/test/HelloJob

注:如果采用按鈕調用或者其他條件下啟動,則需要根據自己的需求來使用代碼控制何時觸發該Job的注冊。

4、打包、啟動你的應用

5、訪問dyn/admin應用,搜索/atg/dynamo/service/Scheduler即可看到所有Job,其中包含HelloJob

?

四、關于遠程調用及SingletonSchedulableService

1、服務器間通信

ATG的應用是多個Module打包成為一個應用,一個應用獨占為一個Server實例。原則上,ATG系統中每個應用都可以存在定時Job處理。但是通常情況下,生產環境只會存在一個Schedule服務實例,所有的定時任務都在這個實例上運行,因此很多情況下需要考慮服務間通信的問題。舉例來說如果Store應用在用戶下單后需要觸發一個定時Job來完成某項工作,此時Store服務需要將此項Job注冊到Schedule服務上,需要使用遠程調用的方式實現,所以開發者在開發時需要明晰各種情況下的調用方式。當然遠程調用是另外一個話題,之后再寫文探討。

2、SingletonSchedulableService

繼承SingletonSchedulableService 類可以使用ATG提供的定時Job處理單例模式。此單例不是指當前應用下的單例,而是指ATG應用集群下單例模式。這樣可以有效的避免多個應用都存在相同的定時job,導致資源沖突。具體細節可參考ATG官方文檔。

3、其他

關于定時處理的官方文檔可參照:http://docs.oracle.com/cd/E23095_01/Platform.93/ATGProgGuide/html/s0905schedulerservices01.html

轉載于:https://www.cnblogs.com/shecinfo/archive/2013/05/04/3059838.html

總結

以上是生活随笔為你收集整理的ATG中的定时Job处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。