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

從零搭建開發(fā)腳手架 Spring Boot集成Flyway實現(xiàn)數(shù)據(jù)庫版本管理

運維 數(shù)據(jù)庫運維
Flyway是一款數(shù)據(jù)庫版本控制管理工具,支持數(shù)據(jù)庫版本自動升級。項目初始化的時候,往往都是要先手動執(zhí)行數(shù)據(jù)庫腳本。
本文轉(zhuǎn)載自微信公眾號「Java大廠面試官」,作者laker 。轉(zhuǎn)載本文請聯(lián)系Java大廠面試官公眾號。  
  • Flyway是什么
  • Flyway集成和使用
    • 添加依賴
    • 配置文件
    • 腳本
    • 測試
  • 原理
  • 高級
    • 基于Java的遷移回調(diào)

Flyway是什么

Flyway是一款數(shù)據(jù)庫版本控制管理工具,支持數(shù)據(jù)庫版本自動升級。

  • 項目初始化的時候,往往都是要先手動執(zhí)行數(shù)據(jù)庫腳本。
  • 在開發(fā)過程當中,數(shù)據(jù)結(jié)構(gòu)或者數(shù)據(jù)有更新時,往往都要手動執(zhí)行腳本同步開發(fā)環(huán)境、測試環(huán)境。

現(xiàn)在我們就可以使用flyway來幫我們自動的去完成這個工作。

Flyway集成和使用

添加依賴

  1. <dependency> 
  2.   <groupId>org.flywaydb</groupId>  
  3.   <artifactId>flyway-core</artifactId> 
  4. </dependency> 

 

由于是Spring Boot項目集成,版本直接使用默認的即可

配置文件

  1. spring: 
  2.   flyway: 
  3.     #是否開啟flyway,默認true 
  4.     enabled: true 
  5.     #當遷移時發(fā)現(xiàn)目標schema非空,而且沒有元數(shù)據(jù)的表時,(即迭代中項目)是否自動執(zhí)行基準遷移,默認false
  6.     baseline-on-migrate: true 
  7.     # 是否允許無序運行遷移, 默認false,建議開發(fā)環(huán)境開啟,生成環(huán)境關(guān)閉 
  8.     out-of-ordertrue 
  9.     #設定SQL腳本的目錄,可以配置多個,比如為classpath:db/migration,filesystem:/sql-migrations,默認classpath:db/migration 
  10.     locations: 
  11.       - classpath:db/migration 

更多參數(shù)見 https://flywaydb.org/documentation/configfiles

“這些參數(shù)配到springboot2 項目中, 需要加上 spring前綴

腳本

在resource目錄下面建立db.migration目錄,放置sql文件

sql腳本的格式:

  • V/R+版本號+雙下劃線+描述+結(jié)束符:
    • 例如:V20190429.1530__t_user_update.sql (開發(fā)環(huán)境:建議日期+時分秒)
    • 例如:V1.1__init.sql(生產(chǎn)環(huán)境:建議把上面的腳步合并用版本號)

測試

默認情況下,Spring Boot在應用程序啟動時自動運行Flyway數(shù)據(jù)庫遷移。

結(jié)果如下:

注意:

Flyway社區(qū)版不支持MySQL5.7以下的版本了

https://flywaydb.org/documentation/database/mysql

原理

Flyway 需要在 DB 中先創(chuàng)建一個 metdata 表 (缺省表名為 flyway_schema_history), 在該表中保存著每次遷移的記錄, 記錄包含遷移腳本的版本號和 SQL 腳本的 checksum 值. 當一個新的 SQL 腳本被掃描到后, Flyway 解析該 SQL 腳本的版本號, 并和 metadata 表已執(zhí)行的遷移對比, 如果該 SQL 腳本版本更新的話, 將在指定的 DB 上執(zhí)行該 SQL 文件, 否則跳過該 SQL 文件.

兩個 flyway 版本號的比較, 采用左對齊原則, 缺位用 0 代替. 舉例如下:

  • 1.2.9.4 比 1.2.9 版本高.
  • 1.2.10 比 1.2.9.4 版本高.
  • 1.2.10 和 1.2.010 版本號一樣高, 每個版本號部分的前導 0 會被忽略.

Flyway SQL 文件可以分為兩類:

  • Versioned :用于版本升級, 每個版本有唯一的版本號并只能 apply 一次
  • Repeatable :指可重復加載的 migration, 一旦 SQL 腳本的 checksum 有變動, flyway 就會重新應用該腳本. 它并不用于版本更新, 這類的 migration 總是在 versioned migration 執(zhí)行之后才被執(zhí)行

默認情況下, Migration SQL的命名規(guī)則如下圖:

img

其中的文件名由以下部分組成,除了使用默認配置外,某些部分還可自定義規(guī)則.

  • prefix: 可配置,前綴標識,默認值 V 表示 Versioned, R 表示 Repeatable
  • version: 標識版本號, 由一個或多個數(shù)字構(gòu)成, 數(shù)字之間的分隔符可用點.或下劃線_
  • separator: 可配置, 用于分隔版本標識與描述信息, 默認為兩個下劃線__
  • description: 描述信息, 文字之間可以用下劃線或空格分隔
  • suffix: 可配置, 后續(xù)標識, 默認為.sql*

Flyway 的 metadata 表結(jié)果如下:

  1. CREATE TABLE  flyway_schema_history 
  2.     ( 
  3.         installed_rank INT NOT NULL
  4.         version VARCHAR(50), 
  5.         description VARCHAR(200) NOT NULL
  6.         type VARCHAR(20) NOT NULL
  7.         script VARCHAR(1000) NOT NULL
  8.         checksum INT
  9.         installed_by VARCHAR(100) NOT NULL
  10.         installed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  11.         execution_time INT NOT NULL
  12.         success TINYINT(1) NOT NULL
  13.         PRIMARY KEY (installed_rank), 
  14.         INDEX flyway_schema_history_s_idx (success) 
  15.     ) 
  16.     ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

高級

基于Java的遷移回調(diào)

Flyway使我們能夠使用兩種不同的方法(Java或SQL)創(chuàng)建回調(diào)。前者是最靈活的一種。它為我們提供了執(zhí)行任意代碼的自由。

核心代碼如下:

  1. import lombok.extern.slf4j.Slf4j; 
  2. import org.flywaydb.core.api.callback.BaseCallback; 
  3. import org.flywaydb.core.api.callback.Context; 
  4. import org.flywaydb.core.api.callback.Event; 
  5. import org.flywaydb.core.internal.jdbc.JdbcTemplate; 
  6. import org.springframework.context.annotation.Configuration; 
  7.  
  8. import java.sql.SQLException; 
  9.  
  10. @Configuration 
  11. @Slf4j 
  12. public class ExampleFlywayCallback extends BaseCallback { 
  13.     @Override 
  14.     public void handle(Event event, Context context) { 
  15.         switch (event) { 
  16.             // 在每次成功遷移后觸發(fā)。此事件將在與遷移相同的事務中觸發(fā) 
  17.             case AFTER_EACH_MIGRATE: 
  18.                 log.info("{},", event); 
  19.                 final JdbcTemplate jdbcTemplate = new JdbcTemplate( 
  20.                         context.getConnection()); 
  21.  
  22.                 // Create 10 random users 
  23.                 for (int i = 1; i <= 10; i++) { 
  24.                     try { 
  25.                         jdbcTemplate.execute(String.format("insert into test_user" 
  26.                                 + " (username, first_name, last_name) values" 
  27.                                 + " ('%d@reflectoring.io', 'Elvis_%d', 'Presley_%d')", i, i, i)); 
  28.                     } catch (SQLException throwables) { 
  29.                         throwables.printStackTrace(); 
  30.                     } 
  31.                 } 
  32.         } 
  33.     } 

我們可以在Java遷移回調(diào)中執(zhí)行所需的任何邏輯,可以靈活地實現(xiàn)更多變態(tài)需求。

參考:

https://www.cnblogs.com/harrychinese/p/springboot_flyway.html

 

https://blog.csdn.net/qq_38455201/article/details/103493041

 

責任編輯:武曉燕 來源: Java大廠面試官
相關(guān)推薦

2021-09-01 10:07:43

開發(fā)零搭建Groovy

2021-04-28 16:10:48

開發(fā)腳手架 Spring

2020-08-19 08:55:47

Redis緩存數(shù)據(jù)庫

2021-07-13 18:42:38

Spring Boot腳手架開發(fā)

2021-04-13 14:47:53

認證授權(quán)Java

2021-05-13 17:02:38

MDC腳手架日志

2017-12-27 15:16:35

Spring BootFlyway數(shù)據(jù)庫

2021-03-11 14:16:47

Spring Boo開發(fā)腳手架

2021-07-29 18:49:49

Spring開發(fā)腳手架

2021-04-20 19:24:16

腳手架 Java微信

2021-06-29 17:19:44

Spring Boot集成Flyway

2025-05-16 07:24:41

Springkafka腳手架

2021-06-02 17:58:49

腳手架 冪等性前端

2021-02-19 22:43:50

開發(fā)腳手架Controller

2019-10-30 11:28:56

Javaflyway數(shù)據(jù)庫

2020-06-29 11:35:02

Spring BootJava腳手架

2009-09-16 15:05:58

CakePHP腳手架

2016-08-10 14:59:41

前端Javascript工具

2025-01-26 00:00:35

2022-04-24 11:33:47

代碼管理工程
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91视频中文 | 懂色av一区二区三区在线播放 | 日本亚洲精品成人欧美一区 | 欧美性吧 | 欧洲妇女成人淫片aaa视频 | 天天色图 | 国产午夜精品久久久 | 久久综合欧美 | 激情欧美日韩一区二区 | 日本网站免费观看 | 日本综合在线观看 | 精品国产不卡一区二区三区 | 久久a久久 | 自拍偷拍小视频 | 久久精品视频亚洲 | 密色视频| 午夜亚洲| 成人精品久久 | 欧美男人的天堂 | 国产女人与拘做视频免费 | 久久国产一区二区 | 爱草在线 | 久久久精品一区二区三区四季av | 夜夜骑首页| 国产精品久久久久久影院8一贰佰 | 91国产精品 | 日韩欧美国产精品综合嫩v 一区中文字幕 | 免费成人在线网站 | 成人av网页 | 在线不卡av| 日韩一区二区三区在线 | 亚洲精品一二三 | 日韩精品网站 | 国产精品视频不卡 | 日韩欧美在线免费观看 | av在线播放网站 | 伊人伊人伊人 | 亚洲成人黄色 | 久久免费视频2 | 日韩av福利在线观看 | 日韩人体视频 |