2015-11-25 56 views
0

問題安裝Java Web應用程序運行每個SQL腳本只有一次

與我大學的朋友我在做Web應用程序和我們最近遇到下面的問題

一起。服務器與遠程存儲庫(git)同步。每個人都可以在本地運行應用程序,並在其本地計算機上擁有本地數據庫網絡託管上的數據庫插入服務器上的應用程序。當有人想改變數據庫中的某些東西時,他會寫一個sql腳本將其推送到存儲庫中運行,然後在服務器上運行它並確保每個開發人員都執行它。這對我們來說似乎非常不舒服。

壞主意

該解決方案將被封堵大家到同一個數據庫。但恕我直言,這是不好的主意,因爲:

  • 我們需要購買SQL的另一個網絡主機,因爲目前正在運行的是全球用戶。爲了安全,測試的原因,我們需要另一個。
  • 擁有一個對世界可見的數據庫,只用簡單的密碼保護,似乎對我來說很危險。當前的數據庫被配置爲僅在本地可見(當然相對於服務器而言),所以通常如果需要的話,通過ssh可以看到Web服務器和開發人員。
  • 性能原因。連接到遠程數據庫而不是本地數據庫,考慮到開發人員的使用(更復雜的查詢,測試站點大量的jUnit測試),速度會降低十幾倍,這將是非常痛苦的解決方案。

好主意

前段時間,我在公司工作這個問題得到了解決如下。有一個maven插件被配置爲在應用程序構建(mvn clean install)期間只在指定目錄中運行每個sql腳本一次,即它記住哪個腳本已經被執行並保留它。例如,考慮有人想改變數據庫新列中的內容。然後他編寫腳本將其推送到存儲庫,然後他不擔心任何事情,因爲腳本將在應用程序構建期間自動爲他,切斷和其他開發人員執行。

怎麼辦呢

不幸的是我無法找到該插件或配置。說實話,我在網上找不到任何與我的問題有關的令人驚訝的東西,因爲這對我來說似乎是一個常見問題。那麼我可以通過一些Maven插件來實現嗎?也許有辦法通過適當的Spring配置來實現。如果我不得不手動執行(在應用程序啓動時使用Java),我需要哪些工具,任何建議,類模式?

期待您的幫助。對於我的英語也很抱歉,我不是母語的人。

回答

0

只是一個猜測,但也許你工作的公司使用liquibase或flyway。 在liquibase的情況下,可以通過maven的使用爲好,信息可以在這裏找到:http://www.liquibase.org/,專爲行家integratation這裏:http://www.liquibase.org/documentation/maven/index.html

Spring提供了一個liquibase集成,以及,信息可以在這裏找到:http://www.liquibase.org/documentation/spring.html或者另外,如果你使用Spring啓動:https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

爲數據庫遷移的另一種可能的解決方案是遷徙路線:http://flywaydb.org/

+0

確實有人liquibase,你連猜對了,我使用:爲你的文件入口點春季啓動 – dagi12

相關問題