现在的工作的项目中用了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

Liquibase+spring 初步使用的更多相关文章

  1. (二)Spring初步搭建、IOC创建对象

    环境准备: 见java环境搭建 新建maven项目,同时搭好项目结构,新建相应的包 Spring的初步搭建 1.导入jar包,Spring版本为5.1.10,同时导入junit包 <depend ...

  2. [JavaWeb基础] 008.Spring初步配置

    框架简介: Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Develop ...

  3. spring初学总结思路

    spring初步学习总结 总概括有四个方面:IOC,AOP,JDBC,和事务管理 ioc:实现了new类的一个权力的反转.(平时new类导致代码冗余,手动new类无法满足动态new类的需求) aop: ...

  4. Spring 对JDBC操作的支持

    1.Spring 对JDBC操作的支持 Spring对jdbc技术提供了很好的支持,体现在: 1.Spring对c3p0连接池的支持很完善 2.Spring对jdbc提供了jdbcTemplate,来 ...

  5. 《Spring in action》之Spring之旅

    Spring框架作用是简化java开发的复杂性.下面是spring in action 对spring初步介绍. 一.主要有4种关键策略: 1. 基于POJO的轻量级和最小侵入性编程 . 2. 通过依 ...

  6. SpingMVC流程图

    Struts的请求流程 springmvc的流程 0.struts2       MVC框架  Controller  Hibernate     持久化框架   Model  spring      ...

  7. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  8. 初步了解Spring

    1.了解“控制反转” 控制反转也称为依赖注入,是面向对象编程中的一种设计理念,用来降低程序代码之间的耦合度. 下面是一个最简单的打印机实例 纸张接口,纸张有大小 继承它的有两个类,两种纸张大小的类 A ...

  9. Spring boot -环境搭建 ,初步接触(1)

    1. Eclipse 创建 maven project  项目目录如下: 2. pom.xml  配置文件 <project xmlns="http://maven.apache.or ...

随机推荐

  1. HDU 1950 Bridging signals【最长上升序列】

    解题思路:题目给出的描述就是一种求最长上升子序列的方法 将该列数an与其按升序排好序后的an'求出最长公共子序列就是最长上升子序列 但是这道题用这种方法是会超时的,用滚动数组优化也超时, 下面是网上找 ...

  2. css文字超出变省略号...

    <style>.text1 {    width:200px;    overflow:hidden;    text-overflow:ellipsis;    -o-text-over ...

  3. 如何让iframe背景色透明框架页文件设置

    如何让iframe背景色透明框架页文件设置:<body style="background-color:transparent" > 或 <body bgColo ...

  4. java的selenium环境搭建

    1.下载jdk1.8   环境变量我的博客有我就不说                   selenium下载地址:http://npm.taobao.org/mirrors/selenium 2.下 ...

  5. 计数排序(counting-sort)

    计数排序是一种稳定的排序算法,它不是比较排序.计数排序是有条件限制的:排序的数必须是n个0到k的数,所以计数排序不适合给字母排序.计数排序时间复杂度:O(n+k),空间复杂度:O(k),当k=n时,时 ...

  6. 紫书 习题8-19 UVa 1312 (枚举技巧)

    这道题参考了https://www.cnblogs.com/20143605--pcx/p/4889518.html 这道题就是枚举矩形的宽, 然后从宽再来枚举高. 具体是这样的, 先把所有点的高度已 ...

  7. matlab 中语句 a(b)的意思

    a=[1 2; 3, 4; 5, 6]; b=[1 3 2 1; 1 2 4 2]; c=a(b) c =                 1     5     3     1 1     3   ...

  8. 洛谷 P2744 [USACO5.3]量取牛奶Milk Measuring

    P2744 [USACO5.3]量取牛奶Milk Measuring 题目描述 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最 ...

  9. 如何检查 Android 应用的内存使用情况

    Android是为移动设备而设计的,所以应该关注应用的内存使用情况.尽管Android的Dalvik虚拟机会定期执行垃圾回收操作,但这也不意味着就可以忽视应用在何时何处进行内存分配和释放.为了提供良好 ...

  10. ios的notification机制是同步的还是异步的

    与javascript中的事件机制不同.ios里的事件广播机制是同步的,默认情况下.广播一个通知,会堵塞后面的代码: -(void) clicked { NSNotificationCenter *c ...