2012-08-10 52 views
0

要求很簡單,比如服務器需要在01-01和01-10之間設置變量salesOffRatio爲0.8,共計十天。並且「salesOffRatio = 0.8」是在01-10 00:00:00由石英扳機觸發的工作。問題是由於電力缺乏,服務器在01-05重新啓動,變量salesOffRatio將不再爲0.8,它將變爲初始值,並且因爲01-10 00:00:00已經通過,觸發器將不會觸發。石英服務器下載後自動重新調度作業

是否有解決方案來解決這種問題?我需要自動重新計劃,因爲作業需要將狀態設置很長的時間,並且服務器必須在該持續時間內重新啓動,以維持操作或類似無法避免的操作。

jdbcJobStore失火似乎沒問題,請設置適當的失火閾值。但它是普遍的,在這種情況下,我需要爲每個工作設置不同的值(salesOffRatio1,salesOffRatio2 ...)

回答

1

幾個解決方案,我想出了:

  1. salesOffRatio應該生存重新啓動服務器。將其存儲在數據庫,文件等中。而不是修改變量,更新作業中的數據庫。

  2. 如果你的用例就是這麼簡單,爲什麼不創建一個功能

    double getSalesOffRatio(Date effectiveDate) 
    

    ,將返回正確的salesOffRatio值取決於effectiveDate通過呢?換句話說,每次需要時計算salesOffRatio。順便說一下,與讀取getSalesOffRatio()內的當前系統時間相比,額外的參數將使測試更容易。

  3. 您可以使用XML調度插件或其他方式在每次重新啓動服務器時重新安排所有作業。默認情況下,作業被觸發後會被刪除(durable屬性),所以通過仔細配置失火策略,調度程序將在啓動時重新啓動所有作業。在我看來很脆弱。

最後的思考:在談論失火的政策,你認爲如果在作業計劃重啓時會發生什麼?

+0

在我的實際項目中,數據需要改變太多,將它們包裝在功能中是不切實際的。而且它們是由其他服務器共享的元數據,在db中複製它們是麻煩的,它在元數據改變時涉及到一個問題,我需要更新所有複製的數據。 – jean 2012-08-16 06:24:58

+0

我認爲唯一的辦法是在服務器重啓時手動檢查並重新安排時間。由作業觸發的所有更改都不會持久,並且不需要在事務中進行。所以重新啓動對執行作業沒有壞處 – jean 2012-08-16 06:31:24

0

您可以將'salesOffRatio'的值保存到數據庫或文件中,然後將其初始化爲默認值,您可以將其初始化爲存儲值。

或者,您可以在啓動時運行程序以重新運行所有石英觸發器(或者只需要更新這些值的作業組中的那些觸發器)。