首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

在Web项目中施用LiquiBase实现数据库自动更新

2012-10-27 
在Web项目中使用LiquiBase实现数据库自动更新???? 在Web项目中,我们可以通过配置servlet listener使用Liqu

在Web项目中使用LiquiBase实现数据库自动更新

???? 在Web项目中,我们可以通过配置servlet listener使用LiquiBase自动更新数据库。需要以下七个步骤:
1. 创建一个数据库变更日志(change log)文件。
2. 在变更日志文件内部创建一个变更集(change set)。
3. 配置JNDI数据源。
4. 在项目中加入包liquibase。
5. 配置项目中的web.xml文件。
6. 启动项目。
7. 检验数据库中的变更。


Changelog.xml:

?

?

Web.xml:


???? 通过上面的web.xml文件,可以看到这里配置了一个listener,LiquibaseServletListener这个类继承了ServletContextListener,ServletContextListener 是 ServletContext 的监听者,如果 ServletContext 发生变化,如服务器启动时 ServletContext 被创建,服务器关闭时 ServletContext 将要被销毁。当服务器启动时,LiquibaseServletListener的 contextInitialized()方法被调用,这个方法会比较数据库与Changelog.xml的不同,并自动更新数据库。
?? ? 那么LiquiBase是怎么更新数据的呢?当LiquibaseServletListener第一次被调用时,会创建了两个特定的表。第一个特定于 LiquiBase 的表称为 databasechangelog,它跟踪应用到数据库的所有变更 — 有助于跟踪谁执行了数据库变更以及原因。第二个特定于 LiquiBase的表是 databasechangelock,标识出具有数据库变更锁的用户。LiquiBase通过比较databasechangelog中的记录和Changelog.xml中的changeSet,更新数据库。
?? ? liquid项目1中Changelog.xml中的只有1条changeset


?? ?启动项目1,LiquiBase会自动创建表useraccount,并添加字段userid,accountstate,expiredDate,username。Databasechangelog表会新增一条表示<changeSet id="1" author="jim">的记录。

?? ?liquid项目2中Changelog.xml中的多加了1条changeset

?

?

?? ? 启动项目2,LiquiBase会发现<changeSet id="1" author="jim">已经更新,所以只更新新增的<changeSet id="2" author="jim">。添加字段gender,并设置值为“M”。如果删除表useraccount,并删除表Databasechangelog中所有的记录,重新启动项目2,LiquiBase将创建表useraccount,并添加字段userid,accountstate,expiredDate,username和gender,并设置gender的值为“M”。
?? ?根据上面LiquiBase的特性,如果我们把每一次的数据库变更都写进到changeSet,并使用LiquiBase更新数据库,我们就可以通过对Changelog.xml文件进行版本控制,来控制数据库的版本。当我们升级软件的时候,也可以很方便地自动更新数据库。

???

??? 参考资料:
????IBM 使用 LiquiBase 管理数据库变更:http://www.ibm.com/developerworks/cn/java/j-ap08058/index.html

??? LiquiBase官网:http://www.liquibase.org/?(国内的IP可能进不去,要用代理)

?

?? ? 下载:

?? ??liquibase-1.9.5.zip?? ?LiquiBase1.9.5 ? jar包

?? ??maven_project.rar?? ?2个Mevan项目 ?

?

?

热点排行