[英]Change config values on a specific time
我剛收到一封郵件說我必須在2009-09-01(新稅)更改配置值。 我們的正常方法是在2009-08-31 23:59醒來,然后手動更改值。 這不是一個大問題,因為這不經常發生。 但它讓我想知道其他人如何處理這樣的問題。
所以! 如何處理特定於日期的配置更改?
(我們在asp.net工作,但我不認為這必須是語言特定的)
BR
Carl Bergquist
我通常將這種數據存儲在這樣的數據庫表中
Key, Value, EffectiveFrom, EffectiveTo
-----------------------------------------
VAT, 15.0, 20081201, 20091231
VAT, 17.5, 20100101, NULL
然后,我將使用EffectiveFrom
和EffectiveTo
日期來選擇在給定時間有效的值。 如果利率是開放的,則有效可以通過NULL或99991231。
這也允許您返回而無需更改配置。 例如,如果有人要求您重新計算費率變化前一個月的稅額。
在linux中,有一個命令“ at
”用於批處理執行。
有關詳細信息,請參閱“ man at
”。
說實話,近乎醒來並改變它似乎是最簡單和最便宜的方法。 所有技術解決方案都很好,但這取決於您的工作地點。
在我們的環境中,讓某人醒來並做出改變比重新開發已經運行的軟件的功能更便宜,更簡單。 它肯定涉及較少的測試,開發開銷和成本,這意味着我們傾向於像您一樣手動解決問題。
這完全取決於形勢和技術。
pjp的想法很好,如果從數據庫獲取配置,或者作為元數據來定義整個配置集/文件的有效時間。
另一個可能是:只需准備一個包含新條目的新配置文件,並在午夜(可能重啟服務/程序)交換它們。 交換它們是可能的(如給予bei Neeraj)...
如果計時是一個問題,您應該處理更改,或者至少是正在運行的服務器上的更改時間(以避免時間不同步問題)。
我們在一段時間之前遇到了同樣的問題,並使用以下方法處理。 如果您熟悉配置更改,那么這是合適的。
在我們的案例中,源代碼公開了一個webservice(實際上是第三方),它將返回修改后的配置詳細信息。 並且我們的服務器上運行了一個Windows服務,它繼續輪詢Web服務,如果有任何更改,將更新配置文件。
這在我們的案例中完美地運作..
您可以通過將輪詢Web服務部分更改為配置更改源(例如,從某個磁盤路徑讀取更改)來使用此方法。 但我不確定如何從電子郵件中讀取配置更改。
為什么不只是創建一個shell腳本來交換文件。 在cron中運行它並在一分鍾之前切換文件,如果不成功則發送警報文本,如果成功則發送電子郵件。
這是Linux機器上的一個例子,但我認為你明白了,可以在Windows機器上執行此操作。
腳本:
cp /path/to/old/config /path/to/backup/dir/config.timestamp
cp /path/to/new/config
if(/path/to/new/config exsits) {
sendSuccessEmail();
} else {
sendPanicTextAlert();
}
cron的:
59 23 31 8 * /path/to/script.sh
您可以在手前測試這個,只需指向一些虛擬目錄和文件
我見過混合方法。 而不是實際更改數據模型以包括EffectiveDate / EndDate或自己手動更改值,而是安排腳本自動更改值。 此外,請確保有一個可靠的測試計划來驗證所有更改。
但是,此類手動更改會對報告產生巨大影響。 如果以前的事務直接連接到要更改的表,則歷史報告中的數字可能會以非常糟糕的方式更改。 真的沒有“正確”的答案。
如果我無法執行pjp的解決方案,我會使用計划任務或服務器作業在適當的時候自動更新它。 但是......我可能仍然清醒地檢查它是否有效。
看看最好的解決方案是參數化你的配置文件並添加一些東西,比如應該使用某個條目。 這樣就無需復制或交換文件,您的應用程序只會處理它。 (這適用於配置文件方法或數據庫)
如果您無法更改當前系統而必須更換配置文件,那么您還有兩個選擇:
請記住,對配置文件的任何更改都會導致您的站點重新啟動,因此請確保您負責處理可能導致的所有其他內務處理事務。 (雖然如果你坐在那里半夜復制文件的話,這將完全一樣)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.