现在的工作的项目中用了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. hiho1055/hdu1561 - 树形dp转换成背包

    题目链接 输入:一棵树,每个节点一个权值. 输出:包括1号节点在内的m个节点组成的连通分量的权值和的最大值 hdu1561和hiho1055一样,只是变换了下说法 /***************** ...

  2. Glidar: 一个基于OpenGL的开源实时3D传感器仿真器

    1 简介 这篇博文将介绍一个简单易用的3D传感器仿真器,可以用来模拟Lidars,立体视觉,基于时间飞行技术的ToF相机和微软的Kinect实时产生3D点云数据.Glidar仿真器并不是针对特定的某一 ...

  3. c# 02-18 值类型 引用类型 字符串的不可变性 字符串的处理方法

    1值类型 直接把值存在栈中 栈的特点是后进先出 int double decimal char struct enum bool 2 引用类型 把值存在堆中,把地址存在栈中: string 自定义的类 ...

  4. LeetCode(10)Regular Expression Matching

    题目如下: Python代码: # -*- coding:utf-8 -*- def ismatch(s,p): #先将dp[s+1][p+1]二维数组全置为False dp = [[False] * ...

  5. json对象获取长度以及字符串和json对象的转换

    var arr = Object.keys(typeARR); var str = ''; var len = arr.length; for(var i = 0;i<len;i++){ str ...

  6. c traps and pitfalls reading note(1)

    1. 一直知道char *p = 'a';这样写是错误的,但是为什么是错的,没想过,今天看书解惑. p指向一个字符,但是在c中,''引起来的一个字符代表一个整数,这样指针能不报错.o(^▽^)o 2. ...

  7. 紫书 习题 8-1 UVa 1149(贪心)

    排序之后, 尽量最小和最大的放在一个背包, 放不下就放最大的. #include<cstdio> #include<algorithm> #define REP(i, a, b ...

  8. 【Henu ACM Round#24 A】k-String

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如果是一个k-string的话. 考虑最后的串假设形式为sss..ss(k个s) 则s中出现的字母,整个串中最后出现的次数肯定为k的 ...

  9. Json学习总结(2)——Java 下的 JSON库性能比较:JSON.simple vs. GSON vs. Jackson vs. JSONP

    JSON已经成为当前服务器与WEB应用之间数据传输的公认标准,不过正如许多我们所习以为常的事情一样,你会觉得这是理所当然的便不再深入思考了.我们很少会去想用到的这些JSON库到底有什么不同,但事实上它 ...

  10. Java基础学习总结(2)——接口

    一.接口的概念 JAVA是只支持单继承的,但现实之中存在多重继承这种现象,如"金丝猴是一种动物",金丝猴从动物这个类继承,同时"金丝猴是一种值钱的东西",金丝猴 ...