成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

優雅!Spring Boot使用Flyway進行數據庫腳本遷移管理

數據庫 其他數據庫
Flyway是一個開源的數據庫遷移工具,它通過定義一系列有序的SQL腳本(稱為遷移),幫助你管理數據庫的結構變更。這些遷移腳本可以用于創建表、修改列、添加索引等任何數據庫更改操作。

環境:SpringBoot2.7.18 + Flyway8.5.13

1. 簡介

Flyway是一個開源的數據庫遷移工具,它通過定義一系列有序的SQL腳本(稱為遷移),幫助你管理數據庫的結構變更。這些遷移腳本可以用于創建表、修改列、添加索引等任何數據庫更改操作。Flyway的主要特性和優勢包括:

  • 版本控制:Flyway為數據庫的每個變更分配一個版本號,只有新的變更才會被應用,已經應用過的變更不會重復執行。這使得數據庫變更更加可控和可追蹤。
  • 跨平臺:Flyway支持主流的關系型數據庫,包括MySQL、PostgreSQL、Oracle、SQL Server等。
  • 易用性:Flyway提供了簡單的命令行界面和API,使得開發人員可以輕松地集成到他們的項目中。同時,它還支持與Spring Boot等主流開發框架進行集成。
  • 自動化:Flyway可以自動化執行數據庫遷移,這使得敏捷開發團隊可以更快地開發新功能,同時也可以更容易地進行測試和部署。

在實際項目開發中通過Flyway可以確保每個數據庫變更都有一個唯一的版本號,并按照版本號順序執行,從而避免了重復或錯亂的變更。這使得開發人員能夠清晰地跟蹤和管理數據庫的歷史變更,并確保不同環境(如開發、測試和生產)之間的數據庫結構一致性。

2. 實戰案例

注意:我當前使用的版本Flyway對應的數據庫mysql版本必須是8。

2.1 引入依賴

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

2.2 配置數據庫

spring:
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/pack?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=UTF-8
    username: root
    password: xxxooo
    type: com.zaxxer.hikari.HikariDataSource

2.3 Flyway配置

spring:
  flyway:
    enabled: true
    # 用于存儲遷移歷史記錄的表名, 默認: flyway_schema_history
    table: flyway_schema_history
    # 遷移腳本編碼, 默認: UTF-8
    encoding: UTF-8
    # 當遷移數據庫存在但沒有元數據的表時,自動執行基準遷移,新建flyway_schema_history表
    baseline-on-migrate: true
    # 數據庫遷移腳本的位置, 默認: classpath:db/migration
    # 這里也支持文件系統路徑,前綴:filesystem:
    locations:
    - classpath:db/migration

上面的配置都使用的默認值,如果你沒有自定義需求,你完全可以不進行配置。

最終項目目錄結構如下:

圖片圖片

初始數據庫中有如下表:

圖片圖片

2.4 準備數據庫升級腳本

接下來在db/migration下新建一個遷移腳本(升級),文件名:V1.0_001__create_table.sql

create table t_person (
  id int auto_increment primary key,
  name varchar(32) not null,
  sex varchar(2) not null,
  age int default 0
);

創建表t_person。

特別說明:通常情況下,遷移腳本的格式為 V<VERSION>__<NAME>.sql(其中 <VERSION> 為下劃線分隔的版本,如 "1 "或 "2_1";<NAME>一般你可以寫上該腳本的描述信息)。還有一點要注意:<VERSION>與<NAME>中間是兩個下劃線:'__',最終目錄如下:

圖片圖片

到此所有的配置都完成,接下來只需要啟動服務即可。

2.5 啟動應用服務

控制臺輸出

圖片圖片

通過控制臺輸出,得到下面兩個重要信息:

  1. 創建表flyway_schema_history
  2. 成功升級一個腳本版本是v1.0.001

查看數據庫情況

圖片

執行了升級腳本,創建了數據庫。查看flyway_schema_history表數據:

圖片

記錄了升級腳本文件及版本信息。當多次啟動服務并不會重復的執行。如果你將這里的記錄刪除再吧t_person表刪除,那么下次重啟服務還會執行升級腳本。

經過xxx時間后系統升級數據庫腳本也升級了,我們可以繼續添加升級腳本文件,如下:

圖片圖片

新增了一個腳本文件V1.1_001__update-t_person.sql,文件內容:

alter table t_person add column email varchar(32) default '';

啟動服務,控制臺輸出:

圖片圖片

升級記錄表中新增了一條記錄

圖片圖片

到此一個簡單的Flyway應用就完成了,接下來我們繼續Flyway在SpringBoot中更多用法。

3. Flyway其它用法

3.1 指定數據庫類型

我們可以通過如下配置來設置具體數據庫類型的腳本路徑

spring:
  flyway:
    locations:
    - classpath:db/migration/{vendor}

通過{vendor}占位符,該占位符會更加你當前環境的數據庫類型自動替換,我們只需要在對應的路徑下建立文件夾及升級文件即可,如下:

圖片圖片

3.2 使用其它數據庫

在默認情況下,Flyway使用的是你當前環境中主數據源(存在多個的時候,應用@Primary標記的數據源),我們可以通過如下兩種方式使用其它數據源(多數據源情況下):

  • 自定義FlywayDataSource
@Bean
@FlywayDataSource
DataSource flywayDataSource() {
  HikariDataSource dataSource = new HikariDataSource();
  dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/msg?serverTimeznotallow=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false&characterEncoding=UTF-8");
  dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
  dataSource.setUsername("root");
  dataSource.setPoolName("flyway") ;
  dataSource.setPassword("xxxooo");
  return dataSource ;
}

通過使用@FlywayDataSource注解。

  • 定義flyway數據源信息
spring:
  flyway:
    user: root
    password: xxxooo
    url: jdbc:mysql://localhost:3306/msg?serverTimeznotallow=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false

通過spring.flyway.*指定flyway自己的數據源。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2017-12-27 15:16:35

Spring BootFlyway數據庫

2020-08-13 07:42:15

數據庫Flyway代碼

2019-10-30 11:28:56

Javaflyway數據庫

2021-03-09 17:11:09

數據庫腳手架開發

2021-06-29 17:19:44

Spring Boot集成Flyway

2022-04-08 11:25:58

數據庫操作AbilityData

2021-12-27 09:50:03

JavaScript開發數據分組

2021-05-17 08:00:00

數據庫工具Flyway

2011-03-17 13:23:08

數據導入導出

2022-06-02 13:59:57

數據遷移數據

2009-08-25 16:36:16

C#進行數據庫編程

2009-07-01 10:46:57

JSP程序JSP代碼

2011-05-25 00:00:00

數據庫設計

2024-04-03 10:05:02

2024-12-06 09:27:28

2009-03-16 13:30:55

腳本數據字典Oracle

2010-03-30 18:48:24

Oracle 學習

2011-12-30 09:03:59

MySQL數據庫

2011-03-01 16:30:55

Oracle

2017-10-31 11:55:46

sklearn數據挖掘自動化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美精品一区在线发布 | 91精品国产92 | 天堂久 | 中文字幕亚洲区一区二 | 亚洲综合视频一区 | 欧美国产91| 国产精品久久久久久久7电影 | 男女羞羞视频网站 | 国产在线观看免费 | 国产一区二区在线播放 | 一本一道久久a久久精品综合蜜臀 | 国产三级一区二区三区 | 一级在线观看 | 国产精品久久久久999 | 国产综合精品 | 久久精品一区二区三区四区 | 国产精品久久网 | 国产在线播 | 国产精品一区二区不卡 | 欧美专区日韩专区 | 日韩专区中文字幕 | 在线观看免费黄色片 | 日本不卡在线观看 | 日韩无| 色欧美综合 | 美女激情av | 亚洲欧洲日韩精品 中文字幕 | 亚洲精品美女 | 国产h视频 | 国产精品毛片一区二区三区 | 亚洲啊v在线 | 秋霞电影院午夜伦 | 免费观看一级黄色录像 | av网站免费在线观看 | 一级做a爰片性色毛片视频停止 | 91在线精品视频 | 国产乱码精品1区2区3区 | 操久久| 毛片链接 | av电影手机版 | 五月婷婷丁香婷婷 |