文章出處

整天跟數據庫打交道的程序員都知道,當數據庫的Schema發生改變時是多么痛苦的事情。尤其是一個在不斷開發完善的項目,隨著需求變化,數據庫的schema也會跟著變化,而追蹤記錄這些變化一向都是費時費力。如果你擁有多個測試環境,那么保證這些環境下的數據庫的一致性的難度會成倍增加。

Flyway,一款小工具,應用它能夠大大簡化這方面的工作。

它的優點:

  1. convention over configuration,配置簡單,使用方便;支持Sql及Java配置;

  2. 支持當前幾乎所有的主流數據庫;

  3. 擁有命令行工具、Maven、Gradle插件….應用場景廣泛。

使用它之前先要了解一些概念:

  • 版本:對數據庫的每一次變更可稱為一個版本。

  • 遷移:Flyway把數據庫結構從一個版本更新到另一個版本叫做遷移。

  • 可用的遷移:Flyway的文件系統識別出來的遷移版本。

  • 已經應用的遷移:Flyway已經對數據庫執行過的遷移。

如何使用:

以Sql配置舉例,建立一個文件夾用來存放所有數據庫修改記錄。

每次修改以’V版本號__描述.sql’的方式命名。比如V1__initial_version.sql, V2.1__create_table.sql,V2015.01.05__drop_view.sql

Flyway會根據文件名自動識別版本順序,并根據這些版本順序來應用數據庫修改。

配置

以使用Flyway的命令行工具為例。安裝命令行工具后,運行時Flyway會根據以下路徑來尋找配置文件。

  • 安裝目錄/conf/flyway.properties

  • 用戶目錄/flyway.properties

  • 當前目錄/flyway.properties

或者直接在命令行使用 -configFile=myfile.properties來指定文件。

配置文件的一個示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
flyway.driver=org.hsqldb.jdbcDriver
flyway.url=jdbc:hsqldb:file:/db/flyway_sample
flyway.user=SA
flyway.password=mySecretPwd
flyway.schemas=schema1,schema2,schema3
flyway.table=schema_history
flyway.locations=classpath:com.mycomp.migration,database/migrations,filesystem:/sql-migrations
flyway.sqlMigrationPrefix=Migration-
flyway.sqlMigrationSeparator=__
flyway.sqlMigrationSuffix=-OK.sql
flyway.encoding=ISO-8859-1
flyway.placeholderReplacement=true
flyway.placeholders.aplaceholder=value
flyway.placeholders.otherplaceholder=value123
flyway.placeholderPrefix=#[
flyway.placeholderSuffix=]
flyway.resolvers=com.mycomp.project.CustomResolver,com.mycomp.project.AnotherResolver
flyway.callbacks=com.mycomp.project.CustomCallback,com.mycomp.project.AnotherCallback
flyway.target=5.1
flyway.outOfOrder=false
flyway.validateOnMigrate=true
flyway.cleanOnValidationError=false
flyway.baselineOnMigrate=false

命令行工具的幾個命令:

  • Clean: 刪除所有創建的數據庫對象,包括用戶、表、視圖等。

  • Migrate: 對數據庫依次應用版本更改。

  • Info:獲取目前數據庫的狀態。那些遷移已經完成,那些遷移待完成。所有遷移的執行時間以及結果。

  • Validate:驗證數據庫結構與遷移腳本的異同。

  • Baseline:根據現有的數據庫結構生成一個基準遷移腳本。

進階

flyway提供sql配置和Java配置兩種方式。sql配置可以方便實現對DDL的修改、一些引用數據的修改;而Java的方式則更強大些,可以應用更為復雜的場景,比如對某個數據表中的數據進行一些邏輯處理。具體使用請參見官方文檔:(http://flywaydb.org/documentation/migration/java.html)http://flywaydb.org/documentation/migration/java.html

熟悉Ruby On Rails的程序員都知道Ruby On Rails自帶一個數據庫遷移工具,這個和那個差不多,可以說下JVM平臺的數據庫遷移工具,彌補了JVM平臺下維護數據庫Schema的不足。


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()