Flyway

 

是什麼:如果説git是代碼的版本控制,那麼flyway就是數據庫的版本控制

 

解決問題:

  • 正如git解決協作開發的問題,flyway一樣解決了多人協同設計數據庫的問題
  • 修改或修復數據庫結構
  • 修復錯誤數據

 

工作方式(https://flywaydb.org/getstarted/how),官網上有相關的圖片介紹:

基本上應用方式:

1、增加表結構,這邊建議分開DDL和DML,默認在 這個目錄:db/migration(可以通過FlywayProperties的location值覆蓋實現,在spring boot yml文件中一般是這樣)

flyway:
  locations:
    - db/migration
    - db/ddl

2、修復錯誤的表結構或數據,注意文件的格式是 前綴__版本號__描述.後綴,一般是這樣的

V1_init_db.sql

最近面試官有問到V可不可以用別的替代

 

首先,可以改。通過配置覆蓋,具體字段就不再描述了,很容易從配置類裏面找到

其次,可以用默認的R,表示可以重複執行,可以用於清除數據庫的緩存數據或者常規產生的過期數據等

 

其他一些常見的配置參數

 

flyway.baseline-description對執行遷移時基準版本的描述.
flyway.baseline-on-migrate當遷移時發現目標schema非空,而且帶有沒有元數據的表時,是否自動執行基準遷移,默認false.
flyway.baseline-version開始執行基準遷移時對現有的schema的版本打標籤,默認值為1.
flyway.check-location檢查遷移腳本的位置是否存在,默認false.
flyway.clean-on-validation-error當發現校驗錯誤時是否自動調用clean,默認false.
flyway.enabled是否開啓flywary,默認true.
flyway.encoding設置遷移時的編碼,默認UTF-8.
flyway.ignore-failed-future-migration當讀取元數據表時是否忽略錯誤的遷移,默認false.
flyway.init-sqls當初始化好連接時要執行的SQL.
flyway.locations遷移腳本的位置,默認db/migration.
flyway.out-of-order是否允許無序的遷移,默認false.
flyway.password目標數據庫的密碼.
flyway.placeholder-prefix設置每個placeholder的前綴,默認${.
flyway.placeholder-replacementplaceholders是否要被替換,默認true.
flyway.placeholder-suffix設置每個placeholder的後綴,默認}.
flyway.placeholders.[placeholder name]設置placeholder的value
flyway.schemas設定需要flywary遷移的schema,大小寫敏感,默認為連接默認的schema.
flyway.sql-migration-prefix遷移文件的前綴,默認為V.
flyway.sql-migration-separator遷移腳本的文件名分隔符,默認__
flyway.sql-migration-suffix遷移腳本的後綴,默認為.sql
flyway.tableflyway使用的元數據表名,默認為schema_version
flyway.target遷移時使用的目標版本,默認為latest version
flyway.url遷移時使用的JDBC URL,如果沒有指定的話,將使用配置的主數據源
flyway.user遷移數據庫的用户名
flyway.validate-on-migrate遷移時是否校驗,默認為true.