spring boot 整合Flayway資料庫遷移
一、概述
對於Flyway,對資料庫的所有更改都稱為遷移。遷移可以是版本控制的,也可以是可重複的。版本化遷移有兩種形式:常規遷移和撤消遷移
版本化遷移有一個版本、一個描述和一個校驗和。版本必須是唯一的。為了讓您能夠記住每次遷移所做的事情,本文的描述純粹是提供資訊的。校驗和用於檢測意外變化。版本化遷移是最常見的遷移型別。它們只按順序應用一次
或者,可以通過提供具有相同版本的撤銷遷移來撤銷它們的效果。
可重複遷移有描述和校驗和,但沒有版本。它們不是隻執行一次,而是在每次校驗和更改時(重新)應用。
在一次遷移執行中,可重複遷移總是在所有掛起的版本化遷移執行完畢後最後應用。可重複遷移是按照描述的順序應用的。預設情況下,版本化遷移和可重複遷移都可以用SQL或Java編寫,並且可以由多條語句組成。
預設情況下,版本化遷移和可重複遷移都可以用SQL或Java編寫,並且可以由多條語句組成。
Flyway會自動發現檔案系統和Java類路徑上的遷移
為了跟蹤哪些遷移已經在何時以及由誰應用,Flyway向您的模式中添加了一個模式歷史表。
二、版本化遷移檔案
最常見的遷移型別是版本化遷移。每個版本化遷移都有一個版本、一個描述和一個校驗和。版本必須是唯一的。為了讓您能夠記住每次遷移所做的事情,本文的描述純粹是提供資訊的。校驗和用於檢測意外變化。
版本化遷移只按順序應用一次。
遷移通常用SQL編寫。這使得開始和利用任何現有的指令碼、工具和技能變得容易。它使您能夠訪問資料庫的全套功能,並且無需瞭解任何中間翻譯層。
基於SQL的遷移通常用於
DDL更改(表、檢視、觸發器、序列等的CREATE/ALTER/DROP語句)
簡單參考資料更改(參考資料表中的CRUD)
簡單的批量資料更改(常規資料表中的CRUD)
命名:
為了通過Flyway獲取,SQL遷移必須符合以下命名模式:
The file name consists of the following parts:
-
Prefix:
V
for versioned (configurable),U
for undo (configurable) andR
for repeatable migrations (configurable - Version: Version with dots or underscores separate as many parts as you like (Not for repeatable migrations)
-
Separator:
__
(two underscores) (configurable) - Description: Underscores or spaces separate the words
-
Suffix:
.sql
(configurable)
必須為每個版本化遷移分配唯一的版本。只要符合通常的虛線符號,任何版本都是有效的。在大多數情況下,只需要一個簡單的遞增整數。不過Flyway非常靈活,所有這些版本都是有效的版本化遷移版本:
- 1
- 001
- 5.2
- 1.2.3.4.5.6.7.8.9
- 205.68
- 20130115113556
- 2013.1.15.11.35.56
- 2013.01.15.11.35.56
版本化遷移按版本順序應用。版本按您通常期望的數字排序。
三、springboot使用flyway
1、新建springboot專案
2、引入flyway模組
<dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.2.4</version> </dependency> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
3、配置資料來源
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/flywaydb?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=CTT&nullCatalogMeansCurrent=true username: root password: root123
4、建立空資料庫
5、執行程式
解決[08001] Could not create connection to database server. Attempted reconnect 3 times.
Giving up.
注意:8、0以後mysql的驅動是
driver-class-name: com.mysql.cj.jdbc.Driver
flyway遇到的問題Caused by: java.lang.ClassNotFoundException: org.flywaydb.core.api.callback.FlywayCallbac
注意:版本不對