2

對於即將推出的項目,我打算使用Apache Commons Configuration。使用Apache Commons配置跟蹤更改

我想用庫來讀寫數據庫中給定應用程序的所有配置。

我們要求跟蹤所有配置更改(或配置版本控制)。此更改跟蹤也應存儲在數據庫中。

配置更改不經常發生。

我想知道實現此更改跟蹤功能的最佳方法是什麼? Apache Commons本身有一些支持嗎?還有另一個適合的框架/庫嗎?

回答

2

不幸的是,我不認爲Apache Commons Configuration和您需要更改跟蹤配置數據庫有任何重疊。

如果您需要將配置存儲在數據庫中,我懷疑您需要另一個框架或推出自己的解決方案。回覆。數據庫,2個想法:

  1. 您可以存儲具有有效日期/有效日期的配置。當前配置將是有效日期爲空的配置,並且在更新配置時設置有效日期。有些數據庫支持版本化數據的概念。例如。 Oracle具有flashback的功能,您只需重新編寫數據庫實體,並且Oracle在該時間記錄該表的一個版本(具體可能要複雜得多)。如果您只是爲了審計目的而想要更改配置歷史記錄,這可能是一個有用的解決方案。

另一種解決方案是使用SCM管理您的配置,並使用發佈包來打包/部署此類配置。例如在您的源代碼庫中創建dev/test/prod配置並管理其中的更改。將這些配置包裝在可部署和發佈的適當環境中。您具有SCM的更改跟蹤功能,但無法輕鬆跟蹤部署環境中發生的更改。您的變更管理流程可能會/不會允許這樣做。

上述修改後的版本將允許您在部署的環境中使用SCM解決方案,例如檢查配置到您的prod環境。我沒有看到這個用法很多,我承認。這意味着您的開發和生產環境之間的橋樑/依賴關係,這可能是一個過度的橋樑。

+0

感謝您的回答。你提到「另一個框架」......你知道一個符合要求的嗎?在我們的案例中,Classic SCM不起作用,因爲配置在應用程序的用戶的生產中發生了變化。然而,一些可以在Java應用程序中用作庫的「嵌入式SCM」可能會有所幫助......但是我不知道任何這樣的SCM ... – jbandi

+1

如果您可以確信SCM將可用在所有部署的機器上,那麼你可以使用'java.lang.Runtime.exec()'從你的Java應用程序執行SCM命令。是的,進程創建會帶來性能開銷,但是,由於您認爲配置更改不經常發生,因此我認爲性能開銷不會成爲問題。 –

+0

@Ciaran謝謝,但沒有SCM在部署的機器上不可用,我也不能也不想將它作爲外部依賴項。我更願意考慮一個「嵌入式SCM」,因爲整個SCM都是我的應用程序的一部分......就像「GIT作爲一個庫」一樣......將API公開給應用程序並寫入某種本地(基於文件的)存儲庫。 – jbandi