這篇文章將為大家詳細講解有關Flyway如何使用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
站在用戶的角度思考問題,與客戶深入溝通,找到桂東網(wǎng)站設計與桂東網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站建設、網(wǎng)站設計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務覆蓋桂東地區(qū)。一、開發(fā)時管理數(shù)據(jù)庫遇到的問題:
現(xiàn)在開發(fā)一般都是團隊開發(fā),這樣就會出現(xiàn)項目同步的問題,代碼同步可以通過SVN工具管理起來,那數(shù)據(jù)庫同步怎么辦呢?理想的情況下,在開發(fā)新項目的時候會首先把業(yè)務理清楚,把數(shù)據(jù)庫表設計好,然后將數(shù)據(jù)庫交給專門的人員維護,也就不存在數(shù)據(jù)庫同步的問題了。但實際情況呢?需求從項目開始到項目結束一直在變,很多公司就沒有專門的數(shù)據(jù)庫維護人員,數(shù)據(jù)庫大家都在操作,都在修改,如果團隊之間溝通及時還好,大家每次更新代碼后順便也更新一下數(shù)據(jù)庫,如果溝通不及時,呵呵(大家自行腦補)。。。這樣數(shù)據(jù)庫不同步的問題就凸顯出來了。
二、Flyway 的簡單介紹:
1、概念:
Flyway是獨立于數(shù)據(jù)庫的應用、管理并跟蹤數(shù)據(jù)庫變更的數(shù)據(jù)庫版本管理工具。用通俗的話講,F(xiàn)lyway可以像SVN管理不同人的代碼那樣,管理不同人的sql腳本,從而做到數(shù)據(jù)庫同步。
2、支持的數(shù)據(jù)庫類型:
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腳本的命名規(guī)范:
V+版本號(版本號的數(shù)字間以"."或"_"分隔開)+雙下劃線(用來分隔版本號和描述)+文件描述+后綴名,例如:V2017.9.30__Update.sql。
注:版本號不能相同!
4、Flyway讀取sql腳本的默認位置:
項目的源文件夾下的db/migration目錄。
5、指令:
一共就6個基本指令:migrate、clean、info、validate、baseline、repair。
三、Flyway 的優(yōu)勢:
1、不僅支持sql 腳本,還支持Java 代碼直接操作數(shù)據(jù)庫(flyway-core-x.x.x.jar);
2、有Maven 插件;
3、支持命令行;
4、與Spring 框結合,很方便地實現(xiàn)應用啟動時自動檢查并升級數(shù)據(jù)庫的功能。
四、Flyway命令行工具的使用:
1、解壓下載flyway-commandlin 版本并解壓到本地,結構圖如下:
2、將sql腳本放在Flyway默認的db/migration目錄下,如果放在其他位置需要修改conf/flyway.conf文件中的flyway.locations。
3、根據(jù)自己的情況修改conf/flyway.conf文件中的flyway.url、flyway.user、flyway.password。
4、在命令行執(zhí)行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(); //設置加載數(shù)據(jù)庫的相關配置信息 flyway.setDataSource(dataSource); //設置存放flyway metadata數(shù)據(jù)的表名,默認"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 定義中我們可以看到,我們?yōu)閒lywayMigration 這個bean 實例注入了一個數(shù)據(jù)源,F(xiàn)lyway 的所有操作將針對這個數(shù)據(jù)源進行;同時我們通過init-method 屬性指定了Spring 在實例化該bean 以后,主動執(zhí)行該bean 的migrate 方法,而該方法內會執(zhí)行Flyway 更新數(shù)據(jù)庫的操作。至此,我們達到了在應用啟動時,Spring 實例化上下文的時候,在Spring 實例化flywayMigration 這個bean 的時候,自動執(zhí)行Flyway 更新數(shù)據(jù)庫的操作。
5、處理Flyway 更新數(shù)據(jù)庫和代碼邏輯操作數(shù)據(jù)庫時的沖突(自己目前沒遇到,網(wǎng)上找到的,先留著備不時之需):
如果Flyway 還在更新數(shù)據(jù)庫,沒有完成更新操作之前,應用程序的其他邏輯已經(jīng)開始使用數(shù)據(jù)庫進行其他操作了,會導致應用程序產(chǎn)生很多bug ,甚至根本運行不起來。要解決這個問題,我們可以利用Spring 的bean 依賴原理,讓關鍵的數(shù)據(jù)庫操作bean 依賴于flywayMigration 這個bean ,達到在flywayMigration 沒有實例化完成(數(shù)據(jù)庫更新操作完成)之前,不能進行任何其他數(shù)據(jù)庫相關操作。
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite"> <property name="dataSource" ref="dataSource" /> </bean>
這樣,每次啟動項目時就會自動更新數(shù)據(jù)庫,不必在為數(shù)據(jù)庫不同步煩惱了。
關于Flyway如何使用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享文章:Flyway如何使用-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://aaarwkj.com/article8/gjgip.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、搜索引擎優(yōu)化、網(wǎng)站設計公司、外貿(mào)建站、網(wǎng)站制作、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)