• 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

     

  • 相关阅读:
    洛谷 P1092 虫食算
    2018.3.25校内互测
    洛谷 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows
    洛谷 P1879 [USACO06NOV]玉米田Corn Fields
    洛谷 P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
    ZJOI Day 2 游记
    editorial-render A
    BZOJ2904
    BZOJ 1600
    构造脚本语言
  • 原文地址:https://www.cnblogs.com/itrena/p/5927145.html
Copyright © 2020-2023  润新知