簡體   English   中英

如何在構建時將源自源代碼文件名或內容的數據添加到資源中

[英]How to add data derived from source code file name or content to a resource at build time

背景

我正在使用開源項目mongobee將數據庫遷移添加到現有項目中。 實際的遷移全部由mongobee及其變更日志和變更集的概念來處理。 此增強功能的一部分涉及在運行時檢查當前的MongoDB數據庫遷移版本,並將其與Java應用程序期望的版本進行比較。 這背后的原因是我們希望安裝產品下載代碼更新(新的* .wars),並且在登錄新版本的應用程序后,如果管理員的數據庫版本為admin,則會提示他們更新數據庫低於預期。

我們目前正在使用Maven打包和構建我們的軟件。

問題

困擾我的一個方面是如何處理Java源代碼期望的數據庫版本標記。 我想避免每次我們進行構建並添加遷移時手動輸入此內容。

我提出的解決方案可能不是理想的。 我最初的想法是對變更日志文件和類名使用約定,例如“ v0001_first_migration”,然后在構建時,使用maven AntRun插件來調用一個單獨編譯的Java文件,該文件會遍歷遷移變更日志目錄並查找最新的遷移數字,然后將其存儲在資源文件(可能是XML)中。 然后,應用程序可以在運行時讀取該XML文件以獲得所需的數據庫版本。

1-這可行嗎?

2-有沒有一種方法可以在不使用AntRun的情況下在純Maven中執行類似的操作?

3-是否有另一種方法可以更輕松地完成此操作?

作為我上面提出的解決方案的替代方案,我使用了一個反射項目,位於此處: https//github.com/ronmamo/reflections,並在我的遷移目錄中遵循上述約定(v0001_first_migration,v0002_second_migration)的所有類名進行迭代。 我解析那些使用正則表達式來獲取Integer的對象,並進行比較以確定該應用程序期望的遷移版本。 數據庫方面要容易得多,所以我不再贅述。

現在,不是使用Ant任務,而是將預期的應用程序遷移版本彈出到一個單例(我知道的毛額)中,或者僅調用根據預期使用的位置查找預期的應用程序遷移的函數。

為什么是單身人士? 解析過程非常昂貴,我希望在每個要聯系我們的數據庫的REST調用上使用此數據。 由於當前項目的某些限制,我在REST層中創建了單例。 更好的方法是在Tomcat的情況下,創建一個ServletListener並將遷移版本分配為ServletContext的屬性。 由於我們的REST層的工作方式,我將修改大量函數簽名以傳遞@Context ServletContext。 我們也沒有依賴注入容器,因此如果我不想觸摸REST層中的幾乎所有操作,我的選擇將受到限制。 Singleton在啟動時就獲得了預期的應用程序遷移版本,僅此而已,因此仍然可以輕松地使用模擬進行測試,而且我看不到任何並發問題。

暫無
暫無

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

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