一、為什麼需要資料庫遷移
一般情況下,隨著軟體的使用,資料庫中的表、欄位、索引等會不斷地進行修改,但是如果直接修改生產環境資料庫,會存在一定的風險,因此我們需要一種可靠的方式來管理這些變化,這就是資料庫遷移。
資料庫遷移是在資料庫已經存在的情況下,在不影響資料庫現有數據和結構完整性的情況下,根據需要升級或降級、增加或刪除列、表、約束等,保持與代碼同步,保證資料庫的版本控制。
二、為什麼要使用Spring Boot和Flyway
關於資料庫遷移工具,目前市面上有很多不同的工具可供選擇,那麼Spring Boot和Flyway有何優勢呢?
- Spring Boot是一款基於Spring框架的快速開發微服務的腳手架,使用Spring Boot可以快速搭建一個完整的Web應用服務。
- Flyway是一款資料庫遷移工具,與Spring Boot天生集成,能夠很好地與Spring Boot無縫集成,使用起來比較便捷。
- Spring Boot和Flyway的共同點是都採用了約定大於配置的思想,讓開發者能夠更加專註於業務邏輯的編寫。
三、如何使用Spring Boot和Flyway進行資料庫遷移
1、添加依賴
首先,在pom.xml中添加Spring Boot和Flyway的依賴:
<dependencies> ...省略其他依賴... <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>7.5.1</version> </dependency> </dependencies>
2、配置資料庫連接
接下來,配置資料庫連接,可以在application.properties或application.yml中配置,這裡以application.yml為例:
spring: datasource: url: jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8 username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver
3、編寫資料庫遷移腳本
接下來,我們需要編寫資料庫遷移腳本,Flyway支持多種資料庫腳本,包括SQL、Java腳本等。這裡我們以編寫SQL腳本為例:
V1__create_user_table.sql CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵自增', `username` varchar(20) NOT NULL COMMENT '用戶名', `password` varchar(32) NOT NULL COMMENT '密碼', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='用戶表';
4、配置Flyway
接下來,我們需要配置Flyway,告訴它哪些目錄下存放了資料庫遷移腳本,以及使用的是哪個資料庫:
@Configuration public class FlywayConfig { @Bean public Flyway flyway(DataSource dataSource) { Flyway flyway = new Flyway(); flyway.setDataSource(dataSource); flyway.setLocations("classpath:/db/migration"); flyway.setBaselineOnMigrate(true); flyway.setEncoding("UTF-8"); return flyway; } }
5、運行並驗證
完成以上準備工作後,我們可以執行Spring Boot應用程序,在啟動時,Flyway將自動檢查資料庫狀態並執行相應的遷移腳本。
在啟動時,我們可以在控制台輸出中看到如下信息:
Database: jdbc:mysql://localhost:3306/demo (MySQL 8.0) Successfully validated 1 migration (execution time 00:00.023s) Creating Schema History table `demo`.`flyway_schema_history`... Current version of schema `demo`: <> Migrating schema `demo` to version "1 - create user table" Successfully applied 1 migration to schema `demo` (execution time 00:00.233s)
如果我們需要進行其他的資料庫遷移操作,比如升級某個表,添加某個欄位等,只需要在相應的目錄下編寫對應的資料庫遷移腳本即可。(注意腳本文件命名規則,使用V開頭表示版本號,多個腳本按版本號依次執行)。
四、小結
通過本文的介紹,我們了解了資料庫遷移的概念以及Spring Boot與Flyway的優勢與使用方式。在實際應用中,資料庫遷移工具的使用可以幫助我們更方便地管理資料庫結構和數據,避免不必要的風險。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/285605.html