1. 程式人生 > >分散式環境下定時任務如何做到只執行一次

分散式環境下定時任務如何做到只執行一次

問題:

對於一個部署在多臺機器上的應用,程式執行時,如何保證多個機器上的定時任務只有一個機器上的任務被執行?
思路:對於每一個定時任務job都有一個唯一id,當發現改job處於執行狀態時,其他機器都不會去排程這個job

quartz的分散式解決方案

quartz介紹

Quartz是一個開源的作業排程包,能夠執行在幾乎任何java專案中,小到單機應用,大到電商系統。Quartz能夠建立很容易的排程,也可以建立十個、百個、千個、甚至萬個任務的複雜排程。Quartz將任務定義成java元件,能夠執行幾乎任何你定義的事情。Quartz也支援許多企業級特性,比如JTA和叢集。Quartz的核心是Scheduler、Job、Trigger。Job負責定義需要執行的任務,Trigger負責排程策略,Scheduler負責將二者組合。

quartz的分散式解決方案

啟用quartz的分散式任務排程處理,只需如下兩個步驟,程式無需修改

  • 在資料庫中建立quartz需要的表。這些表由quartz自己維護,用於儲存資料和維護程式執行狀態,這些表對於程式設計師而言是透明的,不需要關注,只需建立好表即可。
  • 在工程的src下增加quartz.properties配置檔案,進行叢集相關操作的配置。