簡體   English   中英

安排 Java 作業每周運行一次,每次使用不同的參數

[英]Schedule a Java job to run once a week with different parameters each time

所以我目前正在設計一個每周運行一次的發票系統。 我們將客戶分成 4 個周期,每周運行一次。 將 Cron 作業安排為每周運行一次但每次都根據月份中的哪一天進行特定參數的最佳方法是什么。 例如,我希望在每月 8 日收到發票的所有客戶在每個月 8 日上午 12:00 發送。 下周我想運行完全相同的程序,但我想在 15 日運行它。 我應該有四個單獨的作業,每個作業都有 4 個特定的參數,每個月都運行一次,還是有一種更時尚的方式將所有內容保存在一個程序和一個每周運行但具有不同參數的作業中? 是我想多了?

在處理您所描述的敏感業務問題時,我永遠不會依賴cron調度來管理狀態。 我寧願將狀態管理完全留給程序。

因此,最好使用存儲狀態的數據庫或文件,以便調度不會影響您的程序執行的操作。 使用這種方法,您可以擁有一個每周運行一次的cron作業。

要存儲的狀態信息(根據您的陳述):

  • 顧客
  • 循環數
  • 上次運行日期

該計划必須能夠:

  • 不重復(如果在同一周內再次運行,則不應重復循環)
  • 填補空白(如果我們在一周或更長時間的間隔后運行它,它應該能夠運行所有錯過的周期)

你想多了 ;) 你可以像這樣在所有 4 個周期都有 cron 條目:

0 0 8,15,22,29 * * command

並添加 case switch 或 if 語句用日期 +"%d" 檢查月份中的某天,但這會使任務復雜化。 更不用說可讀性了。

其他方法是創建一個包裝器腳本,該腳本將保存上面提到的所有“案例”邏輯並將包裝器設置為 cron 命令。 例如

day_of_month=$(date +'%d')
case "${day_of_month}" in
'8') params='your params here' ;;
...
esac
/your/program "${params}"

您可以始終保持簡單並使用 4 個單獨的 crontab 條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM