2010-09-21 175 views
3

我有一個Java應用程序(通用),通過休眠使用數據庫。我通過罐子將它運送給客戶。向客戶端發送數據庫更新(模式和數據)的最佳方式是哪一種? 請考慮客戶端可以具有不同版本的應用程序,並且更新必須是自動的,無需用戶支持。 如果應用程序是用grails編寫的?如何運送數據庫更新?

+0

你想發佈一個新的罐子,並在遷移執行時的罐子被加載(只依賴於tapestry5 IOC)的軌道遷移的渣口?或者你有可以執行的代碼來更新數據庫嗎? – 2010-09-21 17:49:36

+0

查看http://stackoverflow.com/questions/2103646/grails-database-migration – 2010-09-21 19:09:40

+0

沒有grails? – tapioco123 2010-09-22 13:09:54

回答

3

您可以通過跟蹤當前的模式版本(即版本號)並使用修補程序文件將模式升級到下一個版本來完成此操作。您可以不斷增加應用修補程序,直到您達到新的產品/更新版本。

E.g. 說客戶是在修訂5您已經自運出修訂10和12,但他只更新到最新版本 - 15

你可以這樣做:

foreach rev in [clientRev ... currentRev]: 
    apply rev.patch 

所以你就可以申請該修補程序可以提高到10版;然後另一個將它帶到第12回合;那麼另一個將它帶到第15回合;

如果一個不同的客戶端已經在rev 12,他們只需要應用最後一個補丁。

+0

這是肯定的。但是我必須通過我自己來實現它?這是一個非常普遍的問題,有沒有解決方案?這就像在rails中的數據庫遷移一樣,不同之處在於,在rails的ruby中,我們默認使用它是由rails生成的。 – tapioco123 2010-09-21 17:45:22

2

正如@ user779所說的,保持每種格式的變化是一種方式。 Grails documentation提到了一些庫,可能會拿出一些辛苦的工作:LiquiBaseDbMigrate

+0

如果我不使用Grails? – tapioco123 2010-09-22 06:31:10

+1

LiquiBase和DbMigrate不是Grails特有的 - 我只是將Grails插件鏈接到每個插件。看看他們的網站! – Nick 2010-09-22 16:02:03

+0

(+1):LiquiBase – Ralph 2011-02-24 12:10:46

0

您可以在您的發行版中發佈Ruby和Active Record Migrations,並讓您的更新程序執行新的遷移。