站長資訊網
        最全最豐富的資訊網站

        Flyway 使用詳解

        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 版本并解壓到本地,結構圖如下:

          Flyway 使用詳解

          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文件放在下面。

        Flyway 使用詳解

        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教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产成人精品无码免费看| 国产亚洲精品无码拍拍拍色欲| 一区二区国产精品| 四虎国产精品永久一区| 欧美精品v欧洲精品| 精品一区二区三区四区在线| 国产精品自拍一区| 久久精品aⅴ无码中文字字幕重口| 精品乱子伦一区二区三区| 国产亚洲精品va在线| 久久久久女人精品毛片| 中文字幕精品无码久久久久久3D日动漫 | 2021久久国自产拍精品| 亚洲国产精品13p| 久久久久人妻一区精品| 国产成人精品视频2021| 好吊妞视频精品| 91精品美女在线| 国产精品视频色拍拍| 久久精品国产99久久无毒不卡| 亚洲欧洲精品成人久久奇米网| 精品无人区无码乱码毛片国产| 国产精品麻豆入口| MM1313亚洲精品无码| 亚洲成人精品久久| 欧美亚洲精品在线| 精品免费tv久久久久久久| 99re这里只有精品国产精品| 国产女人精品视频国产灰线| 精品一区二区三区无码免费视频 | 精品无码国产污污污免费网站| 亚洲精品成人片在线播放| 四库影院永久四虎精品国产 | 东京热TOKYO综合久久精品| 精品人妻va出轨中文字幕| 久久国产精品99精品国产| 精品一区二区三区在线观看视频 | 亚洲一日韩欧美中文字幕欧美日韩在线精品一区二 | 精品国产日产一区二区三区| 99精品国产在热久久无毒不卡| 国产精品后入内射日本在线观看 |