2013-03-14 27 views
2

我們正在考慮將飛橋集成到我們的系統中,因爲它似乎是一種有效管理數據庫遷移的好工具。將飛橋集成到現有系統中

但是,我不太知道如何着手:

我們有三個不同的數據庫

  1. 生產環境(MySQL的)
  2. 測試環境(MySQL的)
  3. 單元測試(H2內存中)

它們都包含不同的數據(不同的用戶等)。在數據庫之間沒有公共數據(在飛行路線頁面上稱爲參考數據),只有結構應該保持不變。

望着網站我的理解是這樣進行:

  1. 我們必須從中提取我們的生產環境架構的版本,並在文件中保存此如V1__BASE_version.sql。我會這樣做,例如與此:

    mysqldump的-d -u用戶名-p密碼-h主機名DBNAME

  2. 我們確保了DDL通過也越來越結構的轉儲和比較它的匹配測試環境來自生產系統的結構(從差異開始,然後在不明確的地方手動)。在不太可能發生的情況下,我們通過更改測試或實時數據庫結構(取決於更有意義的結果)來擺脫它們。

  3. 我們使用首頁描述的初始版本初始化所有數據庫。對於我的不同數據庫,我使用不同的-Durl =,-Dusername =和-Dpassword =參數。

    MVN飛路:INIT -Dflyway.initVersion = 1 -Dflyway.initDescription = 「基礎版本」

  4. 配置我們的彈簧設置拿起飛路(如在主頁上所描述的)。這可以確保遷移會自動應用和數據庫是一致的狀態與應用

這是做了正確的方法是什麼? 我忘記了任何重要的步驟嗎?

我有一個剩餘的約增加測試數據到內存數據庫的問題:

哪裏是插頁單元測試數據的正確位置? 即使我設置遷飛使用彈簧,使其休眠取決於它使用

<bean id="sessionFactory" class="..." depends-on="flyway"> 
... 
</bean> 

數據源將之前創建的,這是目前我們添加我們的模式和測試數據的地方。如果我們在創建數據源時仍然添加示例數據,那麼如果我沒有弄錯,模式將不會是正確的。

我們如何使用內存數據庫使用flyway的測試數據?

謝謝!

回答

2

您可以配置包含測試數據腳本的額外位置。這應該被配置爲僅包含在單元測試中。

+0

感謝您的回覆。我假設我會根據我使用的彈簧配置文件使用'com.googlecode.flyway.core.Flyway'的locations屬性來配置這個。這是你的意思嗎?其他步驟看起來好嗎? – David 2013-03-14 17:42:33

+1

flyway.setLocations(...),是的其他步驟看起來不錯。 – 2013-03-14 17:45:46