2021年1月16日 星期六

SpringBoot 整合 Flyway

 maven:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>


yml:

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/flyway_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
username: root
password: 123456
jpa:
show-sql: true
flyway:
enabled: true # flyway 的開關,一關就等同沒有 flyway
url: ${spring.datasource.url}
user: ${spring.datasource.username}
password: ${spring.datasource.password}
locations: classpath:db/migration # 預設會在這個路徑找 sql 檔,多個可用逗號隔開
check-location: true
encoding: utf-8 # 預設就是 utf-8
table: flyway_schema_history #預設就是這張表,可以改

baseline-on-migrate: true # 如果 table 的表已有,又改了表,在資料庫就會有兩張表,這時就要為 true
baseline-version: 62 # baseline-on-migrate true ,且真的有執行才有用,預設是 1
#table version 欄位,會從這個版本開始往上增加,<=這個版本的sql不會執行


預設在 class 下(src/main/resources) 要有 db/migration,想改照上面的圖改就可以了,裡面的檔案要照一定的格式才可以使用 flyway,不照做在啟動時就會報錯


flyway有兩個版本,commity 和 teams,teams 要付錢

分成 V、U、R,但 U 要付錢的版本才能用,V 和 U 後接版本號,然後再接兩個底線,內容放資料庫的操作

springboot 啟動後就會執行裡面的東西,預設會先創建 flyway_schema_history,想改照上面的 yml 改就行

※以 V 來說會執行數字最小的,然後一直往數字大的執行,可以跳號

※執行到錯誤就停止或執行到最新的一筆

※flyway_schema_history 裡的東西不能改,一啟會報錯,而且還不好抓錯誤

※db/migration 的檔名一執行過就不要改了,一啟動也會報錯,但可以用 flyway repair 後再執行可以解決,下面會說明怎麼安裝

※但 db/migration 檔案裡的內容不在 flyway 的控管範圍,假設用 flyway 創建了一張表,然後自己去資料庫改了欄位名稱,只要在新的內容裡對應好就不會報錯,只是失去了版本控管的意義而已


flyway 指令

官網下載好後解壓,以 windows 為例

conf 可以設定資料庫連線,設定四個就可以玩了,flyway.url   flyway.driver  flyway.user  flyway.password,前面的 # 是註解,要拿掉

在這個資料夾的同一層有 flyway 用在linux    flyway.cmd 用在windows,linux 要在前面加「./」就可以用這個指令了,想在認何地方用這個指令,要自己加環境變數


clean 會將 flyway_schema_history 所在的所有 table,不管是不是版控裡建的,都會drop 掉,可怕的指令

info 會將 flyway_schema_history 表列出來

baseline 和上面的 yml 的作用一樣

repair 最常用的一個指令,如有錯時,大部分都用這個指令,然後再執行就可以解決大部分的事

github 連結


沒有留言:

張貼留言