中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

淺談SpringBoot之開啟數據庫遷移的FlyWay使用

發布時間:2020-10-26 00:39:19 來源:腳本之家 閱讀:139 作者:南北雪樹 欄目:編程語言

本文介紹了SpringBoot開啟數據庫遷移的FlyWay使用,分享給大家,具體如下:

一,首先我先了解下FlyWay是如何運轉的。

最簡單的方案是將Flyway指向一個空數據庫。

淺談SpringBoot之開啟數據庫遷移的FlyWay使用 

它將嘗試找到其元數據表。當數據庫為空時,Flyway將不會找到它, 而是創建它。您現在擁有一個名為SCHEMA_VERSION的單個空表的數據庫 :

淺談SpringBoot之開啟數據庫遷移的FlyWay使用 

該表將用于跟蹤數據庫的狀態。之后,Flyway將開始掃描應用程序的文件系統或類路徑進行遷移。它們可以用Sql或Java編寫。
然后根據其版本號對遷移進行排序,并按順序應用:

淺談SpringBoot之開啟數據庫遷移的FlyWay使用 

隨著應用每個遷移,元數據表將相應更新:

schema_version

淺談SpringBoot之開啟數據庫遷移的FlyWay使用 

隨著元數據和初始狀態的到位,我們現在可以談論遷移到較新的版本。

Flyway將再次掃描應用程序的文件系統或類路徑進行遷移。根據元數據表檢查遷移。如果版本號低于或等于標記為當前版本的版本號,則忽略它們。

剩余的遷移是掛起的遷移:可用但未應用。

淺談SpringBoot之開啟數據庫遷移的FlyWay使用 

然后,他們通過版本號進行排序,并依次執行:

淺談SpringBoot之開啟數據庫遷移的FlyWay使用 

該元數據表進行更新,因此:

schema_version

就是這樣!每當需要發展數據庫時,無論是結構(DDL)還是參考數據(DML),只需創建一個版本號高于當前版本的新遷移。下一次Flyway啟動時,它會發現并相應地升級數據庫。

二,FlyWay在SpingBoot的使用

一種途徑是通過Spring Boot的spring.jpa.hibernate.ddl-auto屬性將hibernate.hbm2ddl.auto屬性設置為create、 create-drop或update。例如,要把hibernate.hbm2ddl.auto設置為create-drop,我們可以在application.yml里加入如下內容:

spring:
  jpa:
    hibernate:
      ddl-auto: create-drop

然而,這對生產環境來說并不理想,因為應用程序每次重啟數據庫, Schema就會被清空,從頭開始重建。它可以設置為update,但就算這樣,我們也不建議將其用于生產環境。

還有一個途徑。我們可以在schema.sql里定義Schema。在第一次運行時,這么做沒有問題,但隨后每次啟動應用程序時,這個初始化腳本都會失敗,因為數據表已經存在了。這就要求在書寫初始化腳本時格外注意,不要重復執行那些已經做過的工作。
一個比較好的選擇是使用數據庫遷移庫(database migration library)。它使用一系列數據庫腳本,而且會記錄哪些已經用過了,不會多次運用同一個腳本。應用程序的每個部署包里都包含了這些腳本,數據庫可以和應用程序保持一致。Spring Boot為兩款流行的數據庫遷移庫提供了自動配置支持。

  1. Flyway(http://flywaydb.org)
  2. Liquibase(http://www.liquibase.org)

當你想要在Spring Boot里使用其中某一個庫時,只需在項目里加入對應的依賴,然后編寫腳本就可以了。讓我們先從Flyway開始了解吧。

1. 用Flyway定義數據庫遷移過程

Flyway是一個非常簡單的開源數據庫遷移庫,使用SQL來定義遷移腳本。它的理念是,每個腳本都有一個版本號, Flyway會順序執行這些腳本,讓數據庫達到期望的狀態。它也會記錄已執行的腳本狀態,不會重復執行。在閱讀列表應用程序這里,我們先從一個沒有數據表和數據的空數據庫開始。因此,這個腳 本里需要先創建Reader和Book表,包含外鍵約束和初始化數據。代碼清單8-2就是從空數據庫到 可用狀態的Flyway腳本。

Flyway數據庫初始腳本

create table Reader (
id serial primary key,
username varchar(25) unique not null,
password varchar(25) not null,
fullname varchar(50) not null
);
create table Book (
id serial primary key,
author varchar(50) not null,
description varchar(1000) not null,
isbn varchar(10) not null,
title varchar(250) not null,
reader_username varchar(25) not null,
foreign key (reader_username) references Reader(username)
);
create sequence hibernate_sequence;
insert into Reader (username, password, fullname)
values ('craig', 'password', 'Craig Walls');

如你所見, Flyway腳本就是SQL。讓其發揮作用的是其在Classpath里的位置和文件名。Flyway腳本都遵循一個命名規范,含有版本號,具體如圖8-1所示。

淺談SpringBoot之開啟數據庫遷移的FlyWay使用 

所有Flyway腳本的名字都以大寫字母V開頭,隨后是腳本的版本號。后面跟著兩個下劃線和對腳本的描述。因為這是整個遷移過程中的第一個腳本,所以它的版本是1。描述可以很靈活,主要用來幫助理解腳本的用途。稍后我們需要向數據庫添加新表,或者向已有數據表添加新字段。可以再創建一個腳本,標明版本號為2。Flyway腳本需要放在相對于應用程序Classpath根路徑的/db/migration路徑下。因此,項目中, 腳本需要放在src/main/resources/db/migration里。你還需要將spring.jpa.hibernate.ddl-auto設置為none,由此告知Hibernate不要創建數據表。這關系到application.yml中的如下內容:

spring:
jpa:
hibernate:
ddl-auto: none

剩下的就是將Flyway添加為項目依賴。在Gradle里,此依賴是這樣的:

compile(“org.flywaydb:flyway-core”) 

在Maven項目里, 是這樣的:

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

在應用程序部署并運行起來后, Spring Boot會檢測到Classpath里的Flyway,自動配置所需的 Bean。 Flyway會依次查看/db/migration里的腳本,如果沒有執行過就運行這些腳本。每個腳本都執行過后,向schema_version表里寫一條記錄。應用程序下次啟動時,Flyway會先看schema_version里的記錄,跳過那些腳本。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

济南市| 屯门区| 内丘县| 勐海县| 和田县| 五莲县| 吴江市| 镇坪县| 保德县| 佛教| 托克托县| 湖南省| 道真| 河西区| 济阳县| 宜兴市| 呼伦贝尔市| 贵定县| 平乡县| 潜山县| 图木舒克市| 商南县| 广平县| 哈尔滨市| 宜兰县| 仁怀市| 繁峙县| 彰化市| 托克托县| 响水县| 固阳县| 昌都县| 吴川市| 永平县| 宁武县| 耿马| 柘城县| 明星| 无为县| 东乡族自治县| 上栗县|