首頁 Java Java基礎 Flyway 使用詳解

Flyway 使用詳解

Jul 28, 2020 pm 06:31 PM

Flyway 使用詳解

#現在開發一般都是團隊開發,這樣就會出現專案同步的問題,程式碼同步可以透過SVN工具管理起來,那資料庫同步怎麼辦呢?理想的情況下,在開發新專案的時候會先把業務理清楚,把資料庫表設計好,然後將資料庫交給專門的人員維護,也就不存在資料庫同步的問題了。但實際情況呢?需求從專案開始到專案結束一直在變,很多公司就沒有專門的資料庫維護人員,資料庫大家都在操作,都在修改,如果團隊之間溝通及時還好,大家每次更新程式碼後順便也更新一下資料庫,如果溝通不及時,呵呵(大家自行腦補)。 。 。這樣資料庫不同步的問題就凸顯出來了。

二、Flyway 的簡單介紹:

1、概念:

Flyway是獨立於資料庫的應用、管理並追蹤資料庫變更的資料庫版本管理工具。用通俗的話講,Flyway可以像SVN管理不同人的程式碼一樣,管理不同人的sql腳本,從而做到資料庫同步。 2、支援的資料庫類型:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoenix。

3、sql腳本的命名規範:

V 版本號(版本號的數字間以"."或"_"分隔開) 雙底線(用來分隔版本號和描述) 檔案描述後綴名,例如:V2017.9.30__Update.sql。

註:版本號碼不能相同!

4、Flyway讀取sql腳本的預設位置:

專案的來源資料夾下的db/migration目錄。 5、指令:總共就6個基本指令:migrate、clean、info、validate、baseline、repair。

三、Flyway 的優點:

1、不只支援sql 腳本,也支援Java 程式碼直接操作資料庫(flyway-core-x.x.x. jar);

2、有Maven 外掛;

3、支援命令列;

4、與Spring 框結合,很方便地實現應用程式啟動時自動檢查並升級資料庫的功能。

四、Flyway命令列工具的使用:

1、解壓縮下載flyway-commandlin 版本並解壓縮到本地,結構圖如下:

  

  2、將sql腳本放在Flyway預設的db/migration目錄下,如果放在其他位置需要修改conf/flyway.conf檔案中的flyway.locations。

3、依照自己的狀況修改conf/flyway.conf檔案中的flyway.url、flyway.user、flyway.password。

4、在命令列執行migrate指令。

五、與Maven專案結合使用:

######1、引入依賴座標:###
<!-- flyway -->
 <dependency>
 <groupId>org.flywaydb</groupId>
 <artifactId>flyway-core</artifactId>
 <version>4.2.0</version>
 <dependency>
登入後複製
###2、在src/main/resources目錄下建立存放sql版本檔案的路徑dataBase/sqlite(也可以寫預設路徑db/migration),並將sql檔案放在下面。 ###############3、增加flyway的java類別:###
package com.xxxxxx.flyway;
 
 import javax.sql.DataSource;
 import org.flywaydb.core.Flyway;
 
 public class MigrationSqlite {
 
 private DataSource dataSource;
 
 public void setDataSource(DataSource dataSource) {
 this.dataSource = dataSource;
 }
 
 public void migrate() {
 //初始化flyway类
 Flyway flyway = new Flyway();
 //设置加载数据库的相关配置信息
 flyway.setDataSource(dataSource);
 //设置存放flyway metadata数据的表名,默认"schema_version",可不写
 flyway.setTable("SCHMA_VERSION");
 //设置flyway扫描sql升级脚本、java升级脚本的目录路径或包路径,默认"db/migration",可不写
 flyway.setLocations("dataBase/sqlite");
 //设置sql脚本文件的编码,默认"UTF-8",可不写
 flyway.setEncoding("UTF-8");
 
 flyway.migrate();
 }
 }
登入後複製
###4、在spring中實例化第3步的java類別:###
<bean id="MigrationSqlite" class="com.xxxxxx.flyway.MigrationSqlite" init-method="migrate">
 <property name="dataSource" ref="dataSource"></property>
 </bean>
登入後複製
## #從上面的bean 定義中我們可以看到,我們為flywayMigration 這個bean 實例注入了一個資料來源,Flyway 的所有操作將針對這個資料來源進行;同時我們透過init-method 屬性指定了Spring 在實例化該bean以後,主動執行該bean 的migrate 方法,而該方法內會執行Flyway 更新資料庫的操作。至此,我們達到了在應用程式啟動時,Spring 實例化上下文的時候,在Spring 實例化flywayMigration 這個bean 的時候,自動執行Flyway 更新資料庫的操作。 ######5、處理Flyway 更新資料庫和程式碼邏輯作業資料庫時的衝突(自己目前沒遇到,網路上找到的,先留著備不時之需):######如果Flyway 還在更新資料庫,沒有完成更新操作之前,應用程式的其他邏輯已經開始使用資料庫進行其他操作了,會導致應用程式產生許多bug ,甚至根本運作不起來。要解決這個問題,我們可以利用Spring 的bean 依賴原理,讓關鍵的資料庫操作bean 依賴flywayMigration 這個bean ,達到在flywayMigration 沒有實例化完成(資料庫更新作業完成)之前,不能進行任何其他資料庫相關操作。 ###
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite">
 <property name="dataSource" ref="dataSource" />
 </bean>
登入後複製
###這樣,每次啟動專案時就會自動更新資料庫,不必在為資料庫不同步煩惱了。 ###

推薦教學:《Java教學

以上是Flyway 使用詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)