欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Flyway實現(xiàn)簡化Spring Boot項目部署

 更新時間:2020年06月13日 09:34:50   作者:江南一點雨  
這篇文章主要介紹了基于Flyway實現(xiàn)簡化Spring Boot項目部署,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

1.什么是 Flyway

我們在公司做開發(fā)時,由于項目需求的變化,或者前期設計缺陷,導致在后期需要修改數(shù)據(jù)庫,這應該是一個比較常見的事情,如果項目還沒上線,你可能把表刪除了重新創(chuàng)建,但是如果項目已經(jīng)上線了,就不能這樣簡單粗暴了,我們需要通過 SQL 腳本在已有數(shù)據(jù)表的基礎上進行升級。

目前 Java 這塊,想要對數(shù)據(jù)庫的版本進行管理主要有兩個工具:

Flyway

Liquibase

兩個工具各有千秋,但是核心功能都是數(shù)據(jù)庫的版本管理,這里主要來看 Flyway。就像我們使用 Git 來管理代碼版本一樣,F(xiàn)lyway 可以用來管理數(shù)據(jù)庫版本。

好了,接下來我們就來看看用 Flyway 如何簡化微人事部署,然后再來說說 Flyway 的一個大致原理。

2.嵌入到微人事

如果是在一個全新的項目中使用 Flyway,那么在新建一個 Spring Boot 項目時,就有 Flyway 的選項,如下圖:


項目創(chuàng)建成功后,resources 目錄下也會多出來一個 db/migration 目錄,這個目錄用來存放數(shù)據(jù)庫腳本,如下:

注意

這個如果創(chuàng)建項目時就選擇了 Flyway 依賴,就會有這個目錄?,F(xiàn)在我要在已經(jīng)做好的微人事中加入 Flyway,這個目錄就需要我手動創(chuàng)建了。

首先在微人事中添加 flyway 依賴:

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

然后在 vhr-web 模塊下的 resources 目錄下,手動創(chuàng)建 db/migration 目錄,然后在該目錄下創(chuàng)建數(shù)據(jù)庫腳本,數(shù)據(jù)庫腳本的命名方式如下:

V<VERSION>__<NAME>.sql

首先是大寫字母 V,然后是版本號,要是有小版本可以用下劃線隔開,例如 2_1,版本號后面是兩個下劃線,然后是腳本名稱,文件后綴是 .sql。

例如我這里創(chuàng)建我的第一個數(shù)據(jù)庫腳本,取名為 V1__vhr.sql,腳本內(nèi)容就是微人事的數(shù)據(jù)庫腳本,大家可以在 https://github.com/lenve/vhr 這里獲取到。

完了之后,可以不用添加額外配置,大家只需要在本地 MySQL 中創(chuàng)建一個空的 vhr 數(shù)據(jù)庫即可,然后直接啟動微人事項目,項目啟動成功后,我們查看啟動日志:

從這段啟動日志中,我們可以看到 Flyway 的執(zhí)行信息,數(shù)據(jù)庫腳本的執(zhí)行執(zhí)行,同時這里還說了,F(xiàn)lyway 還給創(chuàng)建了一個 flyway_schema_history 表,這個表用來記錄數(shù)據(jù)庫的更新歷史。

這個時候,打開本地數(shù)據(jù)庫,我們發(fā)現(xiàn) vhr 庫中該有的表都有了。同時還發(fā)現(xiàn)了 flyway_schema_history 表,如下:

有了這條記錄,下次再啟動 vhr 項目,V1__vhr.sql 這個腳本文件就不會執(zhí)行了,因為系統(tǒng)知道這個腳本已經(jīng)執(zhí)行過了,如果你還想讓 V1__vhr.sql 腳本再執(zhí)行一遍,需要手動刪除 flyway_schema_history 表中的對應記錄,那么項目啟動時,這個腳本就會被執(zhí)行了。

3.執(zhí)行細節(jié)

  • 我們在定義腳本的時候,除了 V 字開頭的腳本之外,還有一種 R 字開頭的腳本,V 字開頭的腳本只會執(zhí)行一次,而 R 字開頭的腳本,只要腳本內(nèi)容發(fā)生了變化,啟動時候就會執(zhí)行。
  • 使用了 Flyway 之后,如果再想進行數(shù)據(jù)庫版本升級,就不用該以前的數(shù)據(jù)庫腳本了,直接創(chuàng)建新的數(shù)據(jù)庫腳本,項目在啟動時檢測了有新的更高版本的腳本,就會自動執(zhí)行,這樣,在和其他同事配合工作時,也會方便很多。因為正常我們都是從 Git 上拉代碼下來,不拉數(shù)據(jù)庫腳本,這樣要是有人更新了數(shù)據(jù)庫,其他同事不一定能夠收到最新的通知,使用了 Flyway 就可以有效避免這個問題了。
  • 所有的腳本,一旦執(zhí)行了,就會在 flyway_schema_history 表中有記錄,如果你不小心搞錯了,可以手動從 flyway_schema_history 表中刪除記錄,然后修改 SQL 腳本后再重新啟動(生產(chǎn)環(huán)境不建議)。

4.其他配置

在 Spring Boot 中,關于 Flyway 也有不少配置,這些配置都在 application.properties 中進行配置,常用的幾個來和大家說下:

  • spring.flyway.enabled:是否開啟 flyway,默認就是開啟的
  • spring.flyway.encoding:flyway 字符編碼
  • spring.flyway.locations:sql 腳本的目錄,默認是 classpath:db/migration,如果有多個,用 , 隔開
  • spring.flyway.clean-disabled:這個屬性非常關鍵,它表示是否要清除已有庫下的表,如果執(zhí)行的腳本是 V1__xxx.sql,那么會先清除已有庫下的表,然后再執(zhí)行腳本,這在開發(fā)環(huán)境下還挺方便,但是在生產(chǎn)環(huán)境下就要命了,而且它默認就是要清除,生產(chǎn)環(huán)境一定要自己配置設置為 true。
  • spring.flyway.table:配置數(shù)據(jù)庫信息表的名稱,默認是 flyway_schema_history。

好了,關于 Flyway 我就先說這么多,代碼也已經(jīng)更新到 vhr (https://github.com/lenve/vhr)上了,感興趣的小伙伴不妨下載試一下。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 使用反射方式獲取JPA Entity的屬性和值

    使用反射方式獲取JPA Entity的屬性和值

    這篇文章主要介紹了使用反射方式獲取JPA Entity的屬性和值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot整合Tomcat連接池的使用

    SpringBoot整合Tomcat連接池的使用

    這篇文章主要介紹了SpringBoot整合Tomcat連接池的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • Spring中AOP的切點、通知、切點表達式及知識要點整理

    Spring中AOP的切點、通知、切點表達式及知識要點整理

    這篇文章主要介紹了Spring中AOP的切點、通知、切點表達式及知識要點整理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java Executor 框架的實例詳解

    Java Executor 框架的實例詳解

    這篇文章主要介紹了Java Executor 框架的實例詳解的相關資料,這里提供實例來幫助大家學習理解這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • 詳解Java的MyBatis框架中SQL語句映射部分的編寫

    詳解Java的MyBatis框架中SQL語句映射部分的編寫

    這篇文章主要介紹了Java的MyBatis框架中SQL語句映射部分的編寫,文中分為resultMap和增刪查改實現(xiàn)兩個部分來講解,需要的朋友可以參考下
    2016-04-04
  • Jenkins系統(tǒng)如何進行數(shù)據(jù)備份

    Jenkins系統(tǒng)如何進行數(shù)據(jù)備份

    隨著我們的長期使用,Jenkins系統(tǒng)中的內(nèi)容會越來越多,特別是一些配置相關的東西,不能有任何丟失。這個時候我們就需要定期備份我們的Jenkins系統(tǒng),避免一些誤操作不小心刪除了某些重要文件,本文就將介紹下Jenkins系統(tǒng)如何進行數(shù)據(jù)備份
    2021-06-06
  • Java源碼解析之超級接口Map

    Java源碼解析之超級接口Map

    今天給各位小伙伴介紹一下超級接口Map,文中對接口Map講的非常詳細,對正在學習java的小伙伴們有很好的幫助喲,需要的朋友可以參考下
    2021-05-05
  • JAVA學習筆記:注釋、變量的聲明和定義操作實例分析

    JAVA學習筆記:注釋、變量的聲明和定義操作實例分析

    這篇文章主要介紹了JAVA學習筆記:注釋、變量的聲明和定義操作,結(jié)合實例形式分析了Java注釋、變量的聲明和定義相關原理、實現(xiàn)方法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • SpringCloud Config統(tǒng)一配置中心問題分析解決與客戶端動態(tài)刷新實現(xiàn)

    SpringCloud Config統(tǒng)一配置中心問題分析解決與客戶端動態(tài)刷新實現(xiàn)

    springcloud config是一個解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個部分,server端提供配置文件的存儲、以接口的形式將配置文件的內(nèi)容提供出去,client端通過接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應用
    2022-10-10
  • SpringBoot中的PUT和Delete請求使用

    SpringBoot中的PUT和Delete請求使用

    這篇文章主要介紹了SpringBoot中的PUT和Delete請求使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評論