前言:
由於項目設計初期的設計缺陷,數據庫字段設計的不夠完整,我們在開發的過程中可能會不斷的往數據庫中增加表,增加字段,刪除字段等操作,如果項目還沒上線的話,就非常簡單。如果項目上線的話我們就需要執行腳本。
這樣就會造成一個問題,如何保證測試環境數據庫和生產環境的字段一致呢,某個開發人員修改了測試庫的一個字段,如何能夠有效的同步到測試庫,測試通過以後如何有效的同步到多個生產庫。
在沒有任何工具之前,我們需要各自手動執行腳本。然而我遇到了下面這個問題。
生產環境的數據庫一般獨立放,我們開發人員需要通過teamviewer 連接人家的電腦,我可以將我的腳本執行好,那麼我的另一個同事也要遠程連接人家的電腦,並且執行他的腳本,三個同事的話就要執行三次。你可能會說我一個人執行,存在別人漏給我說的情況,並且有個生產環境版本迭代會相對慢,比如一個禮拜,這樣溝通成本就很高,別人用系統缺了字段就會報錯,(我太難了)。
爲了解決這個問題,我學了Flyway
Flyway 是什麼?
Flyway能夠自動的幫助我們有效的同步各個發佈數據庫之間的狀態,不管你是加了或者刪了一個字段,還是新加了一張表,他都能自動化的跟隨項目的發佈同時發佈。
Flyway 官方網址:
如何使用Flyway?
1.新建的項目直接引入Flyway
直接在下圖這個文件夾中管理數據庫腳本文件
2. 原有的項目中引入 Flyway
2.1 在pom 文件中引入Jar包。
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
2.2 需要在resource 文件夾下建立一個 db/migration 的文件夾,在這個文件夾下管理sql腳本數據。
2.3 SpringBoot 項目中配置了一個連接Mysql信息,數據庫中準備一個叫test的空數據庫。
2.4 寫了一個需要執行的腳本文件
2.5 啓動項目,看一下執行效果
可以看到我這個腳本中的文件都已經執行,並且生成了一張schema_version1的表,表裏面添加了一條數據。
schema_version中添加了一條該腳本已經執行的數據,當我們再次啓動這個項目的時候,這個腳本不會再執行,如果想腳本再次執行,直接刪掉表中這條數據,該腳本就會執行。
2.6 新寫的幾個腳本文件
新增這倆個文件後,啓動項目,運行成果,schema_history裏面就有三條數據.
FlyWay有倆種運行文件,一種是以V開頭的,緊接着是版本號,接下來__ (倆個下劃線),再加一個文件後綴(.sql).
一般只會執行一次,執行過後,第二次啓動項目便不會執行這個sql,如果需要執行,刪除表裏面對應的數據。
還有一種是R開頭的文件,只要文件有變更修改便會執行。
項目啓動運行後發現,當你有新的腳本 比如版本號爲1.1 FlyWay 會去數據庫中schema_version中查詢執行成功的最大版本號進行對比,高於數據庫中的版本號則會執行這個文件,
好了,這篇文章就先到這,後面發現更好的內容再次補充,感謝大家閱讀。