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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2023/12/3 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java ee的小程序_Java EE调度程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

java ee的小程序

Java EE應用程序服務器具有本機調度支持,并且在大多數應用程序中,不需要包括外部依賴項,例如著名的Quartz調度程序庫。

Java EE 6和7完整配置文件上提供的Java EE 6計時器服務為我們提供了許多選項來定義調度間隔,以及如果停止并重新啟動包含調度程序的應用程序會發生什么情況。

Java EE調度程序可以是:

  • 持久的 :應用程序服務器在應用程序關閉時保存計劃事件,以免丟失事件
  • 自動 :簡單的調度程序定義,大多數細節由應用程序服務器處理
  • 程序化的 :我們可以完全控制所有調度程序參數。

為了確定哪個是最佳選擇,我們應該首先回答以下問題:

1.是否可以錯過一些調度事件?

如果我們停止或重新啟動應用程序(例如在更新過程中),則調度程序將停止,并且某些調度事件可能會丟失。

可以將調度程序配置為保存錯過的事件,并在應用程序再次啟動時執行它們。 應用程序服務器使用內部數據庫(通常是Derby之類的Java DB)來存儲丟失的事件。

這是一個持久的調度程序。

注意 :應用程序服務器將在應用程序(重新)啟動時生成所有丟失的事件。 事件突發的頻率和延遲是可配置的。 有關詳細信息,請參見應用程序服務器文檔。

我們還可以選擇不保留計劃事件,如果應用程序未運行,則計劃事件將丟失。

在非持久性情況下,調度程序生命周期與應用程序相同:它在應用程序啟動時創建,然后在應用程序關閉時銷毀。

相反,持久性調度程序可以保留到應用程序重新啟動; 當應用程序未運行時,它只是在Hibernate。

如何選擇?

如果調度的功能對業務至關重要,而我們不能錯過任何事件,那么持久調度器就是您的理想之選。

在所有其他情況下,非持久性調度程序更輕便(不使用數據庫)并且易于管理(更新應用程序時的障礙更少,因為在應用程序重新啟動時不會出現任何調度事件;該調度程序始終在應用程序啟動時創建)。

2.該應用程序將在群集中運行嗎?

在集群中,我們的應用程序有多個實例正在運行(每個集群節點一個實例),并且所有實例都有自己的調度程序副本。

但是我們只需要在所有群集節點之間運行一個調度程序,否則我們將擁有同一事件的多個副本。

每個應用程序服務器都有自己的方式來處理“多個調度程序實例”問題(例如,請參閱WebSphere的[link 2]),但是通常,當我們使用集群時,要求調度程序應該是持久的。

3.調度間隔在生產時是否可以編程?

需要回答的另一個重要問題:在部署應用程序之后,我們是否應該能夠更改調度?

如果調度參數(它的頻率)是固定的,則自動調度程序是最佳解決方案,因為它的編碼非常簡單:只需一個注釋(如果您喜歡舊方法,則只需很少的XML行)。

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

記得:

  • 自動調度程序計劃是在構建時定義的
  • 程序化調度程序計劃是在應用程序啟動時定義的

自動排程器

定義自動調度程序非常容易:

  • 創建在啟動時執行的單例EJB
  • 創建一個將在每次調度事件時調用的方法
  • 注意:完整的代碼可以在文章項目中找到[請參見鏈接3]。

    第一步:

    @Startup @Singleton public class MyScheduler

    @ javax.ejb.Startup批注要求EJB容器在應用程序啟動時創建EJB(以及我們的調度程序)。

    @ javax.ejb.Singleton批注強制EJB容器僅創建一個實例。

    重要提示:調度程序由應用程序服務器(EJB容器)使用; 應用程序代碼的其余部分永遠不要實例化它。

    然后,我們需要在安排事件時調用的方法:

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

    該方法應為public,并返回void。

    @ javax.ejb.Schedule注釋定義:

    • 計劃間隔,以cron格式[請參見鏈接4]
    • 調度程序的名稱(應用程序中可以有許多調度程序)
    • 一個持久的布爾標志,它定義調度程序是否持久

    例如:

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

    它定義了每15分鐘運行一次的非持久性調度程序。

    有關完整示例,請參見文章項目[鏈接3]中的AutomaticPersistentScheduler和AutomaticNonPersistentScheduler類。

    注意 :還有@Schedules批注[請參見鏈接1],該批注允許定義多個@Schedule定義。

    當存在無法在單個cron定義中表達的計劃要求時,此功能很有用。

    程序調度器

    編程調度程序的構建更為復雜,但它為我們提供了定義調度程序參數的完全自由。

    我們還有更多步驟:

  • 創建在啟動時執行的單例EJB
  • 查找TimerService資源
  • 在EJB初始化時創建調度程序
  • 創建一個@Timeout方法
  • 第一步與自動調度程序相同:

    @Startup @Singleton public class MyScheduler

    然后(第二步),我們需要查找應用程序服務器計時器服務,但是注入可以幫助我們:

    @Resource private TimerService timerService;

    在應用程序啟動時,EJB容器將注入一個TimerService實例,該實例允許我們與Timer服務進行交互。 例如,我們可以列出(甚至刪除)為應用程序定義的所有調度程序。

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

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

    javax.ejb.ScheduleExpression定義cron [請參見鏈接4]時間表,例如@Schedule批注。

    @Schedule和ScheduleExpression之間非常重要的區別是,第一個固定在構建時固定:要更改調度參數(例如,從每15分鐘更改為每30分鐘),我們需要更改類代碼,然后再次構建和部署應用程序。

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

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

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

    使用ScheduleExpression和TimerConfig實例,我們可以使用Timer服務創建調度程序(更精確地說是日歷計時器)。

    timerService.createCalendarTimer(schedule, timerConfig);

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

    最后一步是在類中定義一個方法,該方法將在每次調度事件時調用

    @Timeout public void doSomeThing() {..}

    該方法應為public,并返回void。

    我們已經啟動并運行了調度程序。

    結論

    Java EE標準為我們提供了許多選擇來定義計劃程序,該計劃程序以周期性和重復的方式運行我們的代碼。 不需要其他項目依賴項。

    鏈接

  • 計時器服務API上的Oracle Java EE6教程
  • IBM WebSphere 8.x使用EJB計時器服務為企業bean創建計時器
  • GitHub上的文章項目
  • Cron在Wikipedia上
  • 翻譯自: https://www.javacodegeeks.com/2016/10/java-ee-schedulers.html

    java ee的小程序

    總結

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

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