#現(xiàn)在開發(fā)一般都是團(tuán)隊(duì)開發(fā),這樣就會(huì)出現(xiàn)專案同步的問(wèn)題,程式碼同步可以透過(guò)SVN工具管理起來(lái),那資料庫(kù)同步怎麼辦呢?理想的情況下,在開發(fā)新專案的時(shí)候會(huì)先把業(yè)務(wù)理清楚,把資料庫(kù)表設(shè)計(jì)好,然後將資料庫(kù)交給專門的人員維護(hù),也就不存在資料庫(kù)同步的問(wèn)題了。但實(shí)際情況呢?需求從專案開始到專案結(jié)束一直在變,很多公司就沒有專門的資料庫(kù)維護(hù)人員,資料庫(kù)大家都在操作,都在修改,如果團(tuán)隊(duì)之間溝通及時(shí)還好,大家每次更新程式碼後順便也更新一下資料庫(kù),如果溝通不及時(shí),呵呵(大家自行腦補(bǔ))。 。 。這樣資料庫(kù)不同步的問(wèn)題就凸顯出來(lái)了。
二、Flyway 的簡(jiǎn)單介紹:
1、概念:Flyway是獨(dú)立於資料庫(kù)的應(yīng)用、管理並追蹤資料庫(kù)變更的資料庫(kù)版本管理工具。用通俗的話講,F(xiàn)lyway可以像SVN管理不同人的程式碼一樣,管理不同人的sql腳本,從而做到資料庫(kù)同步。 2、支援的資料庫(kù)類型: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ī)範(fàn):
V 版本號(hào)(版本號(hào)的數(shù)字間以"."或"_"分隔開) 雙底線(用來(lái)分隔版本號(hào)和描述) 檔案描述後綴名,例如:V2017.9.30__Update.sql。
註:版本號(hào)碼不能相同!
4、Flyway讀取sql腳本的預(yù)設(shè)位置:
專案的來(lái)源資料夾下的db/migration目錄。 5、指令:總共就6個(gè)基本指令:migrate、clean、info、validate、baseline、repair。
三、Flyway 的優(yōu)點(diǎn):
4、與Spring 框結(jié)合,很方便地實(shí)現(xiàn)應(yīng)用程式啟動(dòng)時(shí)自動(dòng)檢查並升級(jí)資料庫(kù)的功能。
四、Flyway命令列工具的使用:1、解壓縮下載flyway-commandlin 版本並解壓縮到本地,結(jié)構(gòu)圖如下:
2、將sql腳本放在Flyway預(yù)設(shè)的db/migration目錄下,如果放在其他位置需要修改conf/flyway.conf檔案中的flyway.locations。 3、依照自己的狀況修改conf/flyway.conf檔案中的flyway.url、flyway.user、flyway.password。 4、在命令列執(zhí)行migrate指令。
五、與Maven專案結(jié)合使用:
######1、引入依賴座標(biāo):###<!-- flyway --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>4.2.0</version> <dependency>###2、在src/main/resources目錄下建立存放sql版本檔案的路徑dataBase/sqlite(也可以寫預(yù)設(shè)路徑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è)置加載數(shù)據(jù)庫(kù)的相關(guān)配置信息 flyway.setDataSource(dataSource); //設(shè)置存放flyway metadata數(shù)據(jù)的表名,默認(rèn)"schema_version",可不寫 flyway.setTable("SCHMA_VERSION"); //設(shè)置flyway掃描sql升級(jí)腳本、java升級(jí)腳本的目錄路徑或包路徑,默認(rèn)"db/migration",可不寫 flyway.setLocations("dataBase/sqlite"); //設(shè)置sql腳本文件的編碼,默認(rèn)"UTF-8",可不寫 flyway.setEncoding("UTF-8"); flyway.migrate(); } }###4、在spring中實(shí)例化第3步的java類別:###
<bean id="MigrationSqlite" class="com.xxxxxx.flyway.MigrationSqlite" init-method="migrate"> <property name="dataSource" ref="dataSource"></property> </bean>## #從上面的bean 定義中我們可以看到,我們?yōu)閒lywayMigration 這個(gè)bean 實(shí)例注入了一個(gè)資料來(lái)源,F(xiàn)lyway 的所有操作將針對(duì)這個(gè)資料來(lái)源進(jìn)行;同時(shí)我們透過(guò)init-method 屬性指定了Spring 在實(shí)例化該bean以後,主動(dòng)執(zhí)行該bean 的migrate 方法,而該方法內(nèi)會(huì)執(zhí)行Flyway 更新資料庫(kù)的操作。至此,我們達(dá)到了在應(yīng)用程式啟動(dòng)時(shí),Spring 實(shí)例化上下文的時(shí)候,在Spring 實(shí)例化flywayMigration 這個(gè)bean 的時(shí)候,自動(dòng)執(zhí)行Flyway 更新資料庫(kù)的操作。 ######5、處理Flyway 更新資料庫(kù)和程式碼邏輯作業(yè)資料庫(kù)時(shí)的衝突(自己目前沒遇到,網(wǎng)路上找到的,先留著備不時(shí)之需):######如果Flyway 還在更新資料庫(kù),沒有完成更新操作之前,應(yīng)用程式的其他邏輯已經(jīng)開始使用資料庫(kù)進(jìn)行其他操作了,會(huì)導(dǎo)致應(yīng)用程式產(chǎn)生許多bug ,甚至根本運(yùn)作不起來(lái)。要解決這個(gè)問(wèn)題,我們可以利用Spring 的bean 依賴原理,讓關(guān)鍵的資料庫(kù)操作bean 依賴flywayMigration 這個(gè)bean ,達(dá)到在flywayMigration 沒有實(shí)例化完成(資料庫(kù)更新作業(yè)完成)之前,不能進(jìn)行任何其他資料庫(kù)相關(guān)操作。 ###
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite"> <property name="dataSource" ref="dataSource" /> </bean>###這樣,每次啟動(dòng)專案時(shí)就會(huì)自動(dòng)更新資料庫(kù),不必在為資料庫(kù)不同步煩惱了。 ###
推薦教學(xué):《Java教學(xué)》
以上是Flyway 使用詳解的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

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

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)