1. 程式人生 > 其它 >spring boot 整合Flayway資料庫遷移

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:

  • PrefixV for versioned (configurable), U for undo (configurable) and R 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

注意:版本不對