目的:基於ruby on rails 的思想找到在java web下能夠支持數據庫常變更的一個框架(或者類似的框架)
引用oracle的ruby on rails :http://www.oracle.com/technetwork/cn/testcontent/kern-rails-migrations-085789-zhs.html
開發人員目前熱衷於使用 Ruby on Rails。這種轉移的一個重要原因是:Rails 提供了一個強健的框架,該框架構建在一種迄今爲止最靈活的語言的基礎上。
Rails 的特徵之一是“移植”概念。移植很好地說明了開發人員希望使用這一框架的原因:一般說來,管理數據庫模式的變更是開發人員小組最討厭的工作之一。大多數人依賴於將 DDL 存儲在修訂版控制中,時刻保持警惕,從而確保我們的數據庫創建腳本是最新的且每次運行時都一致。該解決方案非常不適合極限編程項目。由於 Rails 鼓勵迭代開發,人們很容易將持續的模式更改想像成噩夢。
flyway:
flyway 是一個敏捷工具,用於數據庫的移植。採用 Java 開發,支持所有兼容 JDBC 的數據庫。
主要用於在你的應用版本不斷升級的同時,升級你的數據庫結構和裏面的數據。
官方網站:http://flywaydb.org/
支持倆種模式遷徙:
1、基於sql文件遷徙:http://flywaydb.org/documentation/migration/sql.html
2、基於java文件遷徙:http://flywaydb.org/documentation/migration/java.html
可以以spring管理flyway框架,或者說相結合。
項目位置:(以基於sql文件舉例)
在項目源碼包中:
路徑爲 :db/migration 【如果不喜歡可以自己根據配置來命名位置】
命名規範:
1、前綴(可配置,默認值:V)
2、版本(以點或下劃線區分開來,只要你喜歡,你可以使用很多地方)
3、分隔符(兩個下劃線)
4、描述(下劃線或空格分開)
5、後綴(可配置,默認情況下:SQL)
與spring管理配置
<bean id="flyway" class="com.googlecode.flyway.core.Flyway" init-method="migrate">
<property name="dataSource" ref="..."/>
...
</bean>
<!-- The rest of the application (incl. Hibernate) -->
<!-- Must be run after Flyway to ensure the database is compatible with the code -->
<bean id="sessionFactory" class="..." depends-on="flyway">
...
</bean>
把dataSource 配置你的dataSource 、sessionFactory 依賴flyway就可以了。
關於flyway 的bean 裏的init-method 方法。
第一次可能需要你改爲init方法 初始化 schema_version表。
之後改爲migrate就可以了。
注意:flyway不支持版本回滾。(需手動,比較悲劇的一點)
以後數據多改欄位、或者類型的就不用來回通知研發人員了。
直接寫個版本sql文件就可以了,項目啓動時候會查看哪個執行過哪個沒執行。
flyway直接會往高版本遷徙。
flyway 源碼
http://grepcode.com/file/repo1.maven.org/maven2/com.googlecode.flyway/flyway-core/0.6/com/google/code/flyway/core/Flyway.java