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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java ee的小程序_Java EE调度程序

發(fā)布時(shí)間:2023/12/3 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ee的小程序_Java EE调度程序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

java ee的小程序

Java EE應(yīng)用程序服務(wù)器具有本機(jī)調(diào)度支持,并且在大多數(shù)應(yīng)用程序中,不需要包括外部依賴項(xiàng),例如著名的Quartz調(diào)度程序庫。

Java EE 6和7完整配置文件上提供的Java EE 6計(jì)時(shí)器服務(wù)為我們提供了許多選項(xiàng)來定義調(diào)度間隔,以及如果停止并重新啟動(dòng)包含調(diào)度程序的應(yīng)用程序會(huì)發(fā)生什么情況。

Java EE調(diào)度程序可以是:

  • 持久的 :應(yīng)用程序服務(wù)器在應(yīng)用程序關(guān)閉時(shí)保存計(jì)劃事件,以免丟失事件
  • 自動(dòng) :簡單的調(diào)度程序定義,大多數(shù)細(xì)節(jié)由應(yīng)用程序服務(wù)器處理
  • 程序化的 :我們可以完全控制所有調(diào)度程序參數(shù)。

為了確定哪個(gè)是最佳選擇,我們應(yīng)該首先回答以下問題:

1.是否可以錯(cuò)過一些調(diào)度事件?

如果我們停止或重新啟動(dòng)應(yīng)用程序(例如在更新過程中),則調(diào)度程序?qū)⑼V?#xff0c;并且某些調(diào)度事件可能會(huì)丟失。

可以將調(diào)度程序配置為保存錯(cuò)過的事件,并在應(yīng)用程序再次啟動(dòng)時(shí)執(zhí)行它們。 應(yīng)用程序服務(wù)器使用內(nèi)部數(shù)據(jù)庫(通常是Derby之類的Java DB)來存儲(chǔ)丟失的事件。

這是一個(gè)持久的調(diào)度程序。

注意 :應(yīng)用程序服務(wù)器將在應(yīng)用程序(重新)啟動(dòng)時(shí)生成所有丟失的事件。 事件突發(fā)的頻率和延遲是可配置的。 有關(guān)詳細(xì)信息,請(qǐng)參見應(yīng)用程序服務(wù)器文檔。

我們還可以選擇不保留計(jì)劃事件,如果應(yīng)用程序未運(yùn)行,則計(jì)劃事件將丟失。

在非持久性情況下,調(diào)度程序生命周期與應(yīng)用程序相同:它在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建,然后在應(yīng)用程序關(guān)閉時(shí)銷毀。

相反,持久性調(diào)度程序可以保留到應(yīng)用程序重新啟動(dòng); 當(dāng)應(yīng)用程序未運(yùn)行時(shí),它只是在Hibernate。

如何選擇?

如果調(diào)度的功能對(duì)業(yè)務(wù)至關(guān)重要,而我們不能錯(cuò)過任何事件,那么持久調(diào)度器就是您的理想之選。

在所有其他情況下,非持久性調(diào)度程序更輕便(不使用數(shù)據(jù)庫)并且易于管理(更新應(yīng)用程序時(shí)的障礙更少,因?yàn)樵趹?yīng)用程序重新啟動(dòng)時(shí)不會(huì)出現(xiàn)任何調(diào)度事件;該調(diào)度程序始終在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建)。

2.該應(yīng)用程序?qū)⒃谌杭羞\(yùn)行嗎?

在集群中,我們的應(yīng)用程序有多個(gè)實(shí)例正在運(yùn)行(每個(gè)集群節(jié)點(diǎn)一個(gè)實(shí)例),并且所有實(shí)例都有自己的調(diào)度程序副本。

但是我們只需要在所有群集節(jié)點(diǎn)之間運(yùn)行一個(gè)調(diào)度程序,否則我們將擁有同一事件的多個(gè)副本。

每個(gè)應(yīng)用程序服務(wù)器都有自己的方式來處理“多個(gè)調(diào)度程序?qū)嵗眴栴}(例如,請(qǐng)參閱WebSphere的[link 2]),但是通常,當(dāng)我們使用集群時(shí),要求調(diào)度程序應(yīng)該是持久的。

3.調(diào)度間隔在生產(chǎn)時(shí)是否可以編程?

需要回答的另一個(gè)重要問題:在部署應(yīng)用程序之后,我們是否應(yīng)該能夠更改調(diào)度?

如果調(diào)度參數(shù)(它的頻率)是固定的,則自動(dòng)調(diào)度程序是最佳解決方案,因?yàn)樗木幋a非常簡單:只需一個(gè)注釋(如果您喜歡舊方法,則只需很少的XML行)。

相反,如果調(diào)度程序應(yīng)該以某種方式可配置,則最好的解決方案是編程調(diào)度程序,它使我們能夠在應(yīng)用程序啟動(dòng)期間定義所有調(diào)度程序參數(shù),并從屬性文件,數(shù)據(jù)庫或我們正在使用的任何配置解決方案中讀取它們。

記得:

  • 自動(dòng)調(diào)度程序計(jì)劃是在構(gòu)建時(shí)定義的
  • 程序化調(diào)度程序計(jì)劃是在應(yīng)用程序啟動(dòng)時(shí)定義的

自動(dòng)排程器

定義自動(dòng)調(diào)度程序非常容易:

  • 創(chuàng)建在啟動(dòng)時(shí)執(zhí)行的單例EJB
  • 創(chuàng)建一個(gè)將在每次調(diào)度事件時(shí)調(diào)用的方法
  • 注意:完整的代碼可以在文章項(xiàng)目中找到[請(qǐng)參見鏈接3]。

    第一步:

    @Startup @Singleton public class MyScheduler

    @ javax.ejb.Startup批注要求EJB容器在應(yīng)用程序啟動(dòng)時(shí)創(chuàng)建EJB(以及我們的調(diào)度程序)。

    @ javax.ejb.Singleton批注強(qiáng)制EJB容器僅創(chuàng)建一個(gè)實(shí)例。

    重要提示:調(diào)度程序由應(yīng)用程序服務(wù)器(EJB容器)使用; 應(yīng)用程序代碼的其余部分永遠(yuǎn)不要實(shí)例化它。

    然后,我們需要在安排事件時(shí)調(diào)用的方法:

    @Schedule(/** scheduling parameters */) public void doSomeThing() {..}

    該方法應(yīng)為public,并返回void。

    @ javax.ejb.Schedule注釋定義:

    • 計(jì)劃間隔,以cron格式[請(qǐng)參見鏈接4]
    • 調(diào)度程序的名稱(應(yīng)用程序中可以有許多調(diào)度程序)
    • 一個(gè)持久的布爾標(biāo)志,它定義調(diào)度程序是否持久

    例如:

    @Schedule(minute = "*/15",hour = "*",info = "15MinScheduler",persistent = false )

    它定義了每15分鐘運(yùn)行一次的非持久性調(diào)度程序。

    有關(guān)完整示例,請(qǐng)參見文章項(xiàng)目[鏈接3]中的AutomaticPersistentScheduler和AutomaticNonPersistentScheduler類。

    注意 :還有@Schedules批注[請(qǐng)參見鏈接1],該批注允許定義多個(gè)@Schedule定義。

    當(dāng)存在無法在單個(gè)cron定義中表達(dá)的計(jì)劃要求時(shí),此功能很有用。

    程序調(diào)度器

    編程調(diào)度程序的構(gòu)建更為復(fù)雜,但它為我們提供了定義調(diào)度程序參數(shù)的完全自由。

    我們還有更多步驟:

  • 創(chuàng)建在啟動(dòng)時(shí)執(zhí)行的單例EJB
  • 查找TimerService資源
  • 在EJB初始化時(shí)創(chuàng)建調(diào)度程序
  • 創(chuàng)建一個(gè)@Timeout方法
  • 第一步與自動(dòng)調(diào)度程序相同:

    @Startup @Singleton public class MyScheduler

    然后(第二步),我們需要查找應(yīng)用程序服務(wù)器計(jì)時(shí)器服務(wù),但是注入可以幫助我們:

    @Resource private TimerService timerService;

    在應(yīng)用程序啟動(dòng)時(shí),EJB容器將注入一個(gè)TimerService實(shí)例,該實(shí)例允許我們與Timer服務(wù)進(jìn)行交互。 例如,我們可以列出(甚至刪除)為應(yīng)用程序定義的所有調(diào)度程序。

    在我們的例子中,Timer服務(wù)將用于創(chuàng)建新的調(diào)度程序,如下所示(第三步):

    String minuteSchedule = "*/15"; String hourSchedule = "*"; ScheduleExpression schedule = new ScheduleExpression().minute(minuteSchedule).hour(hourSchedule);

    javax.ejb.ScheduleExpression定義cron [請(qǐng)參見鏈接4]時(shí)間表,例如@Schedule批注。

    @Schedule和ScheduleExpression之間非常重要的區(qū)別是,第一個(gè)固定在構(gòu)建時(shí)固定:要更改調(diào)度參數(shù)(例如,從每15分鐘更改為每30分鐘),我們需要更改類代碼,然后再次構(gòu)建和部署應(yīng)用程序。

    在后一種情況(SchedulerExpression)中,可以在應(yīng)用程序啟動(dòng)時(shí)定義和更改計(jì)劃參數(shù)(在示例中變量minutesSchedule和hourSchedule上方)并進(jìn)行更改,例如,可以從以下代碼中讀取minutesSchedule和hourSchedule:
    屬性文件或連接的DBMS。

    TimerConfig timerConfig = new TimerConfig(); timerConfig.setInfo("ProgrammaticPersistentScheduler"); timerConfig.setPersistent(true);

    javax.ejb.TimerConfig讓我們可以選擇定義調(diào)度程序的名稱(setInfo(String)),以及是否為持久性名稱(setPersistent(boolean))。

    使用ScheduleExpression和TimerConfig實(shí)例,我們可以使用Timer服務(wù)創(chuàng)建調(diào)度程序(更精確地說是日歷計(jì)時(shí)器)。

    timerService.createCalendarTimer(schedule, timerConfig);

    createCalendarTime()方法返回一個(gè)javax.ejb.Timer實(shí)例,該實(shí)例可用于查詢計(jì)時(shí)器,例如下一個(gè)將來的事件何時(shí)發(fā)生甚至破壞。
    調(diào)度程序。

    最后一步是在類中定義一個(gè)方法,該方法將在每次調(diào)度事件時(shí)調(diào)用

    @Timeout public void doSomeThing() {..}

    該方法應(yīng)為public,并返回void。

    我們已經(jīng)啟動(dòng)并運(yùn)行了調(diào)度程序。

    結(jié)論

    Java EE標(biāo)準(zhǔn)為我們提供了許多選擇來定義計(jì)劃程序,該計(jì)劃程序以周期性和重復(fù)的方式運(yùn)行我們的代碼。 不需要其他項(xiàng)目依賴項(xiàng)。

    鏈接

  • 計(jì)時(shí)器服務(wù)API上的Oracle Java EE6教程
  • IBM WebSphere 8.x使用EJB計(jì)時(shí)器服務(wù)為企業(yè)bean創(chuàng)建計(jì)時(shí)器
  • GitHub上的文章項(xiàng)目
  • Cron在Wikipedia上
  • 翻譯自: https://www.javacodegeeks.com/2016/10/java-ee-schedulers.html

    java ee的小程序

    總結(jié)

    以上是生活随笔為你收集整理的java ee的小程序_Java EE调度程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。