欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Flyway使用詳解

一、開發(fā)時(shí)管理數(shù)據(jù)庫遇到的問題:

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),噶爾企業(yè)網(wǎng)站建設(shè),噶爾品牌網(wǎng)站建設(shè),網(wǎng)站定制,噶爾網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,噶爾網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

現(xiàn)在開發(fā)一般都是團(tuán)隊(duì)開發(fā),這樣就會出現(xiàn)項(xiàng)目同步的問題,代碼同步可以通過SVN工具管理起來,那數(shù)據(jù)庫同步怎么辦呢?理想的情況下,在開發(fā)新項(xiàng)目的時(shí)候會首先把業(yè)務(wù)理清楚,把數(shù)據(jù)庫表設(shè)計(jì)好,然后將數(shù)據(jù)庫交給專門的人員維護(hù),也就不存在數(shù)據(jù)庫同步的問題了。但實(shí)際情況呢?需求從項(xiàng)目開始到項(xiàng)目結(jié)束一直在變,很多公司就沒有專門的數(shù)據(jù)庫維護(hù)人員,數(shù)據(jù)庫大家都在操作,都在修改,如果團(tuán)隊(duì)之間溝通及時(shí)還好,大家每次更新代碼后順便也更新一下數(shù)據(jù)庫,如果溝通不及時(shí),呵呵(大家自行腦補(bǔ))。。。這樣數(shù)據(jù)庫不同步的問題就凸顯出來了。

二、Flyway 的簡單介紹:

1、概念:

Flyway是獨(dú)立于數(shù)據(jù)庫的應(yīng)用、管理并跟蹤數(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腳本的默認(rèn)位置:

項(xiàng)目的源文件夾下的db/migration目錄。

5、指令:

一共就6個(gè)基本指令: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 框結(jié)合,很方便地實(shí)現(xiàn)應(yīng)用啟動時(shí)自動檢查并升級數(shù)據(jù)庫的功能。

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

1、解壓下載flyway-commandlin 版本并解壓到本地,結(jié)構(gòu)圖如下:

2、將sql腳本放在Flyway默認(rèn)的db/migration目錄下,如果放在其他位置需要修改conf/flyway.conf文件中的flyway.locations。

3、根據(jù)自己的情況修改conf/flyway.conf文件中的flyway.url、flyway.user、flyway.password。

4、在命令行執(zhí)行migrate命令。

五、與Maven項(xiàng)目結(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(也可以寫默認(rèn)路徑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ù)庫的相關(guān)配置信息
 flyway.setDataSource(dataSource);
 //設(shè)置存放flyway metadata數(shù)據(jù)的表名,默認(rèn)"schema_version",可不寫
 flyway.setTable("SCHMA_VERSION");
 //設(shè)置flyway掃描sql升級腳本、java升級腳本的目錄路徑或包路徑,默認(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è)數(shù)據(jù)源,F(xiàn)lyway 的所有操作將針對這個(gè)數(shù)據(jù)源進(jìn)行;同時(shí)我們通過init-method 屬性指定了Spring 在實(shí)例化該bean 以后,主動執(zhí)行該bean 的migrate 方法,而該方法內(nèi)會執(zhí)行Flyway 更新數(shù)據(jù)庫的操作。至此,我們達(dá)到了在應(yīng)用啟動時(shí),Spring 實(shí)例化上下文的時(shí)候,在Spring 實(shí)例化flywayMigration 這個(gè)bean 的時(shí)候,自動執(zhí)行Flyway 更新數(shù)據(jù)庫的操作。

5、處理Flyway 更新數(shù)據(jù)庫和代碼邏輯操作數(shù)據(jù)庫時(shí)的沖突(自己目前沒遇到,網(wǎng)上找到的,先留著備不時(shí)之需):

如果Flyway 還在更新數(shù)據(jù)庫,沒有完成更新操作之前,應(yīng)用程序的其他邏輯已經(jīng)開始使用數(shù)據(jù)庫進(jìn)行其他操作了,會導(dǎo)致應(yīng)用程序產(chǎn)生很多bug ,甚至根本運(yùn)行不起來。要解決這個(gè)問題,我們可以利用Spring 的bean 依賴原理,讓關(guān)鍵的數(shù)據(jù)庫操作bean 依賴于flywayMigration 這個(gè)bean ,達(dá)到在flywayMigration 沒有實(shí)例化完成(數(shù)據(jù)庫更新操作完成)之前,不能進(jìn)行任何其他數(shù)據(jù)庫相關(guān)操作。

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" depends-on="MigrationSqlite">
 <property name="dataSource" ref="dataSource" />
 </bean>

這樣,每次啟動項(xiàng)目時(shí)就會自動更新數(shù)據(jù)庫,不必在為數(shù)據(jù)庫不同步煩惱了。

推薦教程:《Java教程》

分享標(biāo)題:Flyway使用詳解
新聞來源:http://chinadenli.net/article14/cjejde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)自適應(yīng)網(wǎng)站ChatGPT云服務(wù)器用戶體驗(yàn)營銷型網(wǎng)站建設(shè)

廣告

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

成都seo排名網(wǎng)站優(yōu)化