zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    第12月第30天 love2d
    第12月第29天 cocos quick manual
    cpu test
    learning armbian steps(10) ----- armbian 源码分析(五)
    Linux command nmon
    learning ddr Electrical Characteristics and AC Timing
    learning ddr tRP and tRP tRTP CL tRAS
    进入Windows之前发出警告
    向系统日志 写入自定义数据
    创建并写入自定义日志信息
  • 原文地址:https://www.cnblogs.com/itrena/p/5927145.html
Copyright © 2011-2022 走看看