Liquibase+spring
2013-10-10 19:58
453 查看
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。
相关文章推荐
- spring boot 配置liquibase
- LiquiBase概述及(spring boot 入门配置)
- spring boot 源码解析26-Liquibase使用及LiquibaseEndpoint解析
- liquibase数据库更新工具在spring项目中的使用
- Spring3+Mybatis3+Mysql+ivy+liquibase
- Spring3+Mybatis3+Mysql+ivy+liquibase 集成
- spring boot+liquibase踩坑记录
- Liquibase+spring 初步使用
- Spring 的代理服务 AOP
- Spring2.5+JPA+Struts1.3整合开发
- Spring通过@AspectJ方式实现AOP
- Spring+hibernate+springmvc 整合(六)
- 获取spring为注入的service
- spring的分散配置
- spring中context:property-placeholder/元素
- 【Spring】装配Bean-(1)-使用XML配置
- spring和mina2集成报错Cannot convert value of type ..for property 'customEditors..PropertyEditor.
- spring定时器
- spring3初步整合memcached
- Spring Data REST + GemFire + AngularJS Integration