商務網站開發入門這門選修課已經結課了,學生的做業也提交了有一段時間了,出分迫在眉睫,此次評閱採用了多人閱卷的方式,相較於做業系統以前由一我的批閱做業的方式,公平了很多,做業狀態由原來的已評閱和未評閱改成未評閱、評閱中、已評閱,表示評閱的字段由reviewed改成status,因爲要在數據表層面直接操做,所以要用到SQL語句,當時第一想法是在實體類里加status字段,而後在倉庫層手寫SQl,判斷reviewed屬性爲1(評閱完成)的,status賦值爲2(已評閱),其餘的均爲0,直到老師提到flyway,我才知道還有這麼神奇的工具。git
說來也巧,在老師提到flyway二十分鐘以前,我看到了黃庭祥學長寫的關於flyway的博客:flyway數據庫管理,也許這就是緣分吧,當時好像要查一些關於SQL的東西,依稀記得學長寫過,雖然說到最後沒找到,可是卻陰差陽錯發現了這個,雖然說沒咋看明白,可是感受也挺好。
進入flyway官網,首先展現的是一段話:github
數據庫的版本控制。
跨全部環境的健壯的模式演化。
輕鬆,愉快和樸素的SQL。
對於flyway,有的博客是這樣介紹的:spring
Flyway 是一款開源的數據庫版本管理工具,它更傾向於規約優於配置的方式。Flyway 能夠獨立於應用實現管理並跟蹤數據庫變動,支持數據庫版本自動升級,而且有一套默認的規約,不須要複雜的配置,Migrations 能夠寫成 SQL 腳本,也能夠寫在 Java 代碼中,不只支持 Command Line 和 Java API,還支持 Build 構建工具和 Spring Boot 等,同時在分佈式環境下可以安全可靠地升級數據庫,同時也支持失敗恢復等。
第一次成功運行會生成一個名爲"flyway_schema_history"的數據表,以後進行管理都是基於該表
其工做原理以下:
數據庫
首先在pom.xml文件中引入依賴:segmentfault
<!-- flyway --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency>
這部分是沒有寫全的,由於不一樣的Spring版本引入的依賴是不同的,以前也沒了解過,真的不知道每一個Spring版本都對應一個穩定的依賴包,後來看了喜碩學長關於flyway的博客:flyway 實踐,才知道居然有這種事,對於這種現象,學長是這樣解釋的:安全
spring-boot
項目依賴於spring-boot-dependencies
項目,該項目中管理了全部被spring-boot
整合過的技術的版本號。
去文件內搜索flyway
,即找到相關的配置<flyway.version>5.0.7</flyway.version>
。
spring-boot
規定好了,若是你用的是spring-boot 2.0.5.RELEASE
版本,那建議使用flyway:5.0.7
。
這樣管理一是方便,還有一個緣由我以爲是避免衝突。
當引入多個包的時候,就可能會出現版本衝突,我相信,spring-boot
確定是將這些版本通過測試的,保證了無衝突纔會推薦使用這些版本的。app
而後我找到了依賴文件,找到flyway對應的版本:
而後添加到依賴中便可:分佈式
<!-- flyway --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>6.0.8</version> </dependency>
而後配置application.yaml的flyway字段:spring-boot
flyway: enabled: true baseline-on-migrate: true baseline-version: 1 check-location: true
enabled表示是否開啓flywary baseline-on-migrate表示當遷移時發現目標schema非空,並且帶有沒有元數據的表時,是否自動執行基準遷移,默認false. baseline-version表示開始執行基準遷移時對現有的schema的版本打標籤,默認值爲1. check-location表示檢查遷移腳本的位置是否存在,默認false.
接下來,就是引入SQL文件,在resources文件下新建db文件,在db文件中新建migration(遷移)文件,這是flyway默認的檢索路徑,接下來就是導出數據庫,轉儲SQL文件,導出:
而後對SQL文件重命名:
工具
這樣是爲了進行版本控制,便於後續的執行,此後的命名版本號都不得低於該版本,若是後續還要進行其餘操做,只需新建文件,而後編寫SQL便可。
點擊運行,查看數據庫裏的 flyway_schema_history 表單,有對應版本的SQL文件成功執行的記錄
值得注意的是,啓用flyway以後,hibernate的ddl-auto屬性要改成validate,即驗證,當實體定義的字段類型與SQL表裏的不一樣或者不存在時,會終止程序運行,防止字段出現衝突致使程序出現大問題。
以後要想對字段進行修改,不只要修改實體字段,還要編寫SQL,進行版本的遷移,一篇好的博客,真的讓觀看的人恍然大悟,看了喜碩學長的博客,真的明白了好多,還順利的把flyway應用到了系統中,在此特別表達對喜碩學長的感謝。