數據加載中……
          Liquibase+spring 初步使用

          現在的工作的項目中用了liquibase,感覺挺爽的,可以跟蹤、管理數據庫的重構。這對于很多需求變更較大的項目是非常不錯的,特別是互聯網的項目。(雖然互聯網Nosql已經非常流行,不過俺覺得傳統關系型數據庫還是有存在的必要的)

          好了,廢話不多說,說說這幾天的學習心得和實戰總結。

          關于liquibase的優點就不多說了,可以去官網看簡介。

          基本上我是從quickStart開始看的。Liquibase的原理很簡單,就是通過記錄數據庫的結構方面的所有重構都放在一個Changelog中的xml中,通過xml的changeSet去跟蹤數據庫的變更。

          在最近的工作中很好奇,為什么liquibase可以做到識別哪一個ChangeSet需要去對數據庫重構,哪一個不重構(已經執行了數據庫結構的修改操作)。通過測試以后發現,liquibase第一次運行的時候會在DB建立兩張表,分別是databasechangelog和databasechagneloglock:


          這樣就很好理解了,通過DB去繼續并匹配舊的操作和新的操作。

          繼續看databasechange表結構,就發現表結構的主鍵是ID,AUTHOR,FILENAME.

          即通過每一個ChangeSet的ID+修改ChangeSet的作者標示+包含ChangeSet的文件名

          來,也這避免了多人協同開發的沖突。(關于ID和AUTHOR可以再后面配置文件中看到)

          關于databasechangelog,我的理解則是當年是否有操作占有數據庫變更的鎖

          Ps:開始認為這個ID和databasechange的ID應該是同一個值,后來才發現不同,因為屬性值不同,這里的ID應該是databasechange表中的ORDEREXECUTED。這個值應該是數據庫根據執行順序確定的序列號而不是用戶在xml中配置的ID號。

          看完這些,就來看看liquibase怎么在項目中使用,

          吐槽一下,官方的quickStart寫的有點爛,只列了如下幾種:

          一看,我就覺得有點暈,command line我覺得好囧,Ant我不會應該也快被maven淘汰了吧?Grails我google了一下才有所了解。那我知道的就maven和servlet listener。Servlet listener 非web項目咋辦呢?好吧,只有maven一條出路了。在官網找了半天,才發現這東西還支持spring,剛好手頭的項目是架在spring上面的。

          所以,就在spring上面搗鼓了一下,把官方的配置copy一份到自己的xml中就行了(http://www.liquibase.org/manual/spring )。

          bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
                
          <property name="dataSource" ref="myDataSource" />
                
          <property name="changeLog" value="classpath:db-changelog.xml" />
           
                
          <!--
                contexts specifies the runtime contexts to use.
                
          -->
                
          <property name="contexts" value="test, production" />
           
          </bean>

           運行了一下,一切OK。

          不過還是要吐槽一下,如果不是web項目,不用maven,不用spring.那這東西是不是就不能用了呢?

          為啥不能支持一下通過代碼去load執行呢?

           -------------------------------------------------------------------------------------
          初步使用了一下,值得挖掘的東西應該還是很多的。
          記錄一下liquibase的源代碼地址:https://github.com/liquibase/liquibase。

           

           

           

           

           

          posted on 2012-02-09 00:09 潘潘.eagle 閱讀(7873) 評論(2)  編輯  收藏 所屬分類: JAVA

          評論

          # re: Liquibase+spring 初步使用 2012-02-12 11:05 metavige

          如果可以用 Spring
          表示就可以自行 create instance 了
          因為 spring 也只是幫忙作 create instance 以及 ioc 的動作

          你可以自己 new liquibase.integration.spring.SpringLiquibase()
          然後再設定裡面的 Property

          一樣可以達到效果,所以不見得只能用官方網站上面說的那些方式
          還是可以通過代碼去執行的
            回復  更多評論    

          # re: Liquibase+spring 初步使用 2012-02-13 09:47 潘潘.eagle

          恩。這樣是可以的,不過作為一個開源的組件,是不是還是應該直接提供一種方式呢?呵呵。@metavige
            回復  更多評論    
          主站蜘蛛池模板: 衡南县| 罗田县| 望奎县| 新干县| 长垣县| 隆回县| 咸丰县| 宁波市| 新绛县| 瓦房店市| 时尚| 钟山县| 尖扎县| 灵川县| 抚顺县| 大埔县| 枣强县| 上杭县| 宁乡县| 长沙县| 青阳县| 明水县| 江源县| 句容市| 吉水县| 和平区| 克东县| 瑞安市| 奎屯市| 尉犁县| 内江市| 邹城市| 定陶县| 顺平县| 图木舒克市| 丰城市| 类乌齐县| 宣恩县| 晋宁县| 淮北市| 婺源县|