Flyway 是一款開源的數據庫版本管理工具。它能夠很方便的在命令行中使用,或者在Java應用程序中引入,用於管理咱們的數據庫版本。mysql
在項目或產品中,很難一開始就把業務理清楚,把數據庫表設計好,所以數據表也會在迭代週期不斷迭代。在Java應用程序中使用Flyway,能快速有效地用於迭代數據庫表結構,並保證部署到測試環境或生產環境時,數據表都是保持一致的。git
Flyway支持的數據庫不少,從官網摘抄以下:github
Supported databases are Oracle, SQL Server (including Amazon RDS and Azure SQL Database), Azure Synapse (Formerly Data Warehouse), DB2, MySQL (including Amazon RDS, Azure Database & Google Cloud SQL), Aurora MySQL, MariaDB, Percona XtraDB Cluster, TestContainers, PostgreSQL (including Amazon RDS, Azure Database, Google Cloud SQL & Heroku), Aurora PostgreSQL, Redshift, CockroachDB, SAP HANA, Sybase ASE, Informix, H2, HSQLDB, Derby, Snowflake, SQLite and Firebird.
更多的特性,可直接在官網上查詢,這裏再也不一一羅列。spring
Flyway工做流程以下:sql
一、項目啓動,應用程序完成數據庫鏈接池的創建後,Flyway自動運行。數據庫
二、初次使用時,Flyway會建立一個flyway_schema_history
表,用於記錄sql執行記錄。springboot
三、Flyway會掃描項目指定路徑下(默認是classpath:db/migration
)的全部sql腳本,與flyway_schema_history
表腳本記錄進行比對。若是數據庫記錄執行過的腳本記錄,與項目中的sql腳本不一致,Flyway會報錯並中止項目執行。ide
四、若是校驗經過,則根據表中的sql記錄最大版本號,忽略全部版本號不大於該版本的腳本。再按照版本號從小到大,逐個執行其他腳本。工具
如下演示如何在SpringBoot項目中使用Flyway,代碼保存個人Github倉庫。測試
一、初始化一個SpringBoot項目,引入MySQL數據庫驅動依賴等,而且須要引入Flyway依賴:
<!--引入flyway--><dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>6.1.0</version></dependency>
二、添加Flyway配置:
spring: # 數據庫鏈接配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/ssm-demo?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 username: xxx password: xxx flyway: # 是否啓用flyway enabled: true # 編碼格式,默認UTF-8 encoding: UTF-8 # 遷移sql腳本文件存放路徑,默認db/migration locations: classpath:db/migration # 遷移sql腳本文件名稱的前綴,默認V sql-migration-prefix: V # 遷移sql腳本文件名稱的分隔符,默認2個下劃線__ sql-migration-separator: __ # 遷移sql腳本文件名稱的後綴 sql-migration-suffixes: .sql # 遷移時是否進行校驗,默認true validate-on-migrate: true # 當遷移發現數據庫非空且存在沒有元數據的表時,自動執行基準遷移,新建schema_version表 baseline-on-migrate: true
三、根據在配置文件的腳本存放路徑的配置,在resource目錄下創建文件夾db/migration
。
四、添加須要運行的sql腳本。sql腳本的命名規範爲:V+版本號(版本號的數字間以」.「或」_「分隔開)+雙下劃線(用來分隔版本號和描述)+文件描述+後綴名,例如:V20201100__create_user.sql。如圖所示:
五、啓動項目。啓動成功後,在數據庫中能夠看到已按照定義好的腳本,完成數據庫變動,並在flyway_schema_history
表插入了sql執行記錄:
建立成功的表
sql執行記錄