成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用

本文介紹了SpringBoot開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用,分享給大家,具體如下:

金秀網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)2013年至今到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

一,首先我先了解下FlyWay是如何運(yùn)轉(zhuǎn)的。

最簡(jiǎn)單的方案是將Flyway指向一個(gè)空數(shù)據(jù)庫(kù)。

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用 

它將嘗試找到其元數(shù)據(jù)表。當(dāng)數(shù)據(jù)庫(kù)為空時(shí),F(xiàn)lyway將不會(huì)找到它, 而是創(chuàng)建它。您現(xiàn)在擁有一個(gè)名為SCHEMA_VERSION的單個(gè)空表的數(shù)據(jù)庫(kù) :

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用 

該表將用于跟蹤數(shù)據(jù)庫(kù)的狀態(tài)。之后,F(xiàn)lyway將開(kāi)始掃描應(yīng)用程序的文件系統(tǒng)或類(lèi)路徑進(jìn)行遷移。它們可以用Sql或Java編寫(xiě)。
然后根據(jù)其版本號(hào)對(duì)遷移進(jìn)行排序,并按順序應(yīng)用:

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用 

隨著應(yīng)用每個(gè)遷移,元數(shù)據(jù)表將相應(yīng)更新:

schema_version

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用 

隨著元數(shù)據(jù)和初始狀態(tài)的到位,我們現(xiàn)在可以談?wù)撨w移到較新的版本。

Flyway將再次掃描應(yīng)用程序的文件系統(tǒng)或類(lèi)路徑進(jìn)行遷移。根據(jù)元數(shù)據(jù)表檢查遷移。如果版本號(hào)低于或等于標(biāo)記為當(dāng)前版本的版本號(hào),則忽略它們。

剩余的遷移是掛起的遷移:可用但未應(yīng)用。

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用 

然后,他們通過(guò)版本號(hào)進(jìn)行排序,并依次執(zhí)行:

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用 

該元數(shù)據(jù)表進(jìn)行更新,因此:

schema_version

就是這樣!每當(dāng)需要發(fā)展數(shù)據(jù)庫(kù)時(shí),無(wú)論是結(jié)構(gòu)(DDL)還是參考數(shù)據(jù)(DML),只需創(chuàng)建一個(gè)版本號(hào)高于當(dāng)前版本的新遷移。下一次Flyway啟動(dòng)時(shí),它會(huì)發(fā)現(xiàn)并相應(yīng)地升級(jí)數(shù)據(jù)庫(kù)。

二,F(xiàn)lyWay在SpingBoot的使用

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

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

然而,這對(duì)生產(chǎn)環(huán)境來(lái)說(shuō)并不理想,因?yàn)閼?yīng)用程序每次重啟數(shù)據(jù)庫(kù), Schema就會(huì)被清空,從頭開(kāi)始重建。它可以設(shè)置為update,但就算這樣,我們也不建議將其用于生產(chǎn)環(huán)境。

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

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

當(dāng)你想要在Spring Boot里使用其中某一個(gè)庫(kù)時(shí),只需在項(xiàng)目里加入對(duì)應(yīng)的依賴(lài),然后編寫(xiě)腳本就可以了。讓我們先從Flyway開(kāi)始了解吧。

1. 用Flyway定義數(shù)據(jù)庫(kù)遷移過(guò)程

Flyway是一個(gè)非常簡(jiǎn)單的開(kāi)源數(shù)據(jù)庫(kù)遷移庫(kù),使用SQL來(lái)定義遷移腳本。它的理念是,每個(gè)腳本都有一個(gè)版本號(hào), Flyway會(huì)順序執(zhí)行這些腳本,讓數(shù)據(jù)庫(kù)達(dá)到期望的狀態(tài)。它也會(huì)記錄已執(zhí)行的腳本狀態(tài),不會(huì)重復(fù)執(zhí)行。在閱讀列表應(yīng)用程序這里,我們先從一個(gè)沒(méi)有數(shù)據(jù)表和數(shù)據(jù)的空數(shù)據(jù)庫(kù)開(kāi)始。因此,這個(gè)腳 本里需要先創(chuàng)建Reader和Book表,包含外鍵約束和初始化數(shù)據(jù)。代碼清單8-2就是從空數(shù)據(jù)庫(kù)到 可用狀態(tài)的Flyway腳本。

Flyway數(shù)據(jù)庫(kù)初始腳本

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');

如你所見(jiàn), Flyway腳本就是SQL。讓其發(fā)揮作用的是其在Classpath里的位置和文件名。Flyway腳本都遵循一個(gè)命名規(guī)范,含有版本號(hào),具體如圖8-1所示。

淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用 

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

spring:
jpa:
hibernate:
ddl-auto: none

剩下的就是將Flyway添加為項(xiàng)目依賴(lài)。在Gradle里,此依賴(lài)是這樣的:

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

在Maven項(xiàng)目里, 是這樣的:

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

在應(yīng)用程序部署并運(yùn)行起來(lái)后, Spring Boot會(huì)檢測(cè)到Classpath里的Flyway,自動(dòng)配置所需的 Bean。 Flyway會(huì)依次查看/db/migration里的腳本,如果沒(méi)有執(zhí)行過(guò)就運(yùn)行這些腳本。每個(gè)腳本都執(zhí)行過(guò)后,向schema_version表里寫(xiě)一條記錄。應(yīng)用程序下次啟動(dòng)時(shí),F(xiàn)lyway會(huì)先看schema_version里的記錄,跳過(guò)那些腳本。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

網(wǎng)頁(yè)名稱(chēng):淺談SpringBoot之開(kāi)啟數(shù)據(jù)庫(kù)遷移的FlyWay使用
URL地址:http://jinyejixie.com/article28/gdjgcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站排名、關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)公司、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)
奉化市| 晋中市| 读书| 张家界市| 旺苍县| 广饶县| 垣曲县| 泽库县| 砚山县| 平湖市| 前郭尔| 定陶县| 博客| 拜城县| 泉州市| 安康市| 钟山县| 漾濞| 保康县| 改则县| 彰化市| 黄浦区| 衡东县| 武穴市| 徐闻县| 宁乡县| 色达县| 南川市| 博罗县| 广丰县| 将乐县| 方正县| 齐河县| 高邮市| 深州市| 循化| 曲周县| 无锡市| 阿拉善左旗| 正定县| 都兰县|