在開發中,咱們常常會遇到上線數據庫表的狀況,代碼上咱們有git,svn這樣優秀的版本控制軟件,可是數據庫的迭代咱們不能使用手工的方式迭代吧?或者說每次上線前手工去數據庫執行。這樣帶來的便捷性就會有很大問題,執行者須要跟開發屢次覈對數據庫執行腳本語句確保正確性後才執行。git
爲了更好的管理好各個環境的數據庫版本,咱們能夠在項目中增長Flyway來管理數據表的版本。spring
Flyway是一款開源的數據庫版本管理工具,利用簡單的配置,獨立跟蹤進行數據版本的迭代。sql
Version control for your database.Robust schema evolution across all your environments. With ease, pleasure and plain SQL.docker
簡單的來講,使用Flyway來幫助咱們執行數據庫的腳本,打破原先的腳本執行的規範。數據庫
原先部署程序的流程是這樣的。springboot
這樣的步驟中沒有引入docker的概念,引入docker,部署流程還會存在變更,甚至自動化ci等等都是能夠進行流程方面的優化,也帶來更高的工做效率。微信
flyway在使用的時候會在一個空的數據庫裏面建立一張表,表名通常是flyway_schema_history,老版本的名字是schema_version.運維
表結構以下: 記錄了表變動的歷史
CREATE TABLE `flyway_schema_history` (
`installed_rank` int(11) NOT NULL,
`version` varchar(50) DEFAULT NULL,
`description` varchar(200) NOT NULL,
`type` varchar(20) NOT NULL,
`script` varchar(1000) NOT NULL,
`checksum` int(11) DEFAULT NULL,
`installed_by` varchar(100) NOT NULL,
`installed_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`execution_time` int(11) NOT NULL,
`success` tinyint(1) NOT NULL,
PRIMARY KEY (`installed_rank`),
KEY `flyway_schema_history_s_idx` (`success`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
複製代碼
執行流程:svn
compile("org.flywaydb:flyway-core:5.1.3")
複製代碼
注意sql腳本的文件命名 其中的文件名由如下部分組成,除了使用默認配置外,某些部分還可自定義規則。工具
prefix: 可配置,前綴標識,默認值V表示Versioned,R表示Repeatable version: 標識版本號,由一個或多個數字構成,數字之間的分隔符可用點.或下劃線_ separator: 可配置,用於分隔版本標識與描述信息,默認爲兩個下劃線__ description: 描述信息,文字之間能夠用下劃線或空格分隔 suffix: 可配置,後續標識,默認爲.sql
啓動項目以後就會在數據庫中執行腳本中的sql內容。
在介紹的使用過程當中,有不少參數能夠進行配置,定製屬於本身個性化的flyway內容。注意不一樣的Spring boot 項目有不一樣的配置內容。
flyway.baseline-description= # 執行基線時標記已有Schema的描述
flyway.baseline-version=1 # 基線版本默認開始序號 默認爲 1.
flyway.baseline-on-migrate=false # 針對非空數據庫是否默認調用基線版本 , 這也是咱們上面版本號從 2 開始的緣由
flyway.check-location=false # 是否開啓腳本檢查 檢查腳本是否存在 默認false
flyway.clean-on-validation-error=false # 驗證錯誤時 是否自動清除數據庫 高危操做!!!
flyway.enabled=true # 是否啓用 flyway.
flyway.encoding=UTF-8 # 腳本編碼.
flyway.ignore-failed-future-migration=true # 在讀元數據表時,是否忽略失敗的後續遷移.
flyway.init-sqls= # S獲取鏈接後當即執行初始化的SQL語句
flyway.locations=classpath:db/migration # 腳本位置, 默認爲classpath: db/migration.
flyway.out-of-order=false # 是否容許亂序(out of order)遷移
flyway.placeholder-prefix= # 設置每一個佔位符的前綴。 默認值: ${ 。
flyway.placeholder-replacement=true # 是否要替換佔位符。 默認值: true 。
flyway.placeholder-suffix=} # 設置佔位符的後綴。 默認值: } 。
flyway.placeholders.*= # 設置佔位符的值。
flyway.schemas= # Flyway管理的Schema列表,區分大小寫。默認鏈接對應的默認Schema。
flyway.sql-migration-prefix=V # 遷移腳本的文件名前綴。 默認值: V 。
flyway.sql-migration-separator=__ # 遷移腳本的分割符 默認雙下劃線
flyway.sql-migration-suffix=.sql # 遷移腳本的後綴 默認 .sql
flyway.table=schema_version # Flyway使用的Schema元數據表名稱 默認schema_version
flyway.url= # 待遷移的數據庫的JDBC URL。若是沒有設置,就使用配置的主數據源。
flyway.user= # 待遷移數據庫的登陸用戶。
flyway.password= # 待遷移數據庫的登陸用戶密碼。
flyway.validate-on-migrate=true # 在運行遷移時是否要自動驗證。 默認值: true 。
複製代碼
使用flyway幫助咱們解決了每次彙總數據庫sql的問題,而且也不須要人工干預數據庫的執行。大大提升效率與工做的流程。
參考資料以下:
blog.waterstrong.me/flyway-in-p… 快速掌握和使用Flyway blog.csdn.net/chenleiking… Flyway簡介
·END·
路雖遠,行則必至
本文原發於 同名微信公衆號「胖琪的升級之路」,回覆「1024」你懂得,給個讚唄。
微信ID:YoungRUIQ