文档章节

Liquibase使用

a
 anniweiya
发布于 2017/05/24 22:07
字数 806
阅读 664
收藏 0

1. Liquibase使用背景:

现实中数据库无法保证一成不变,如若有改动,测试和开发都有些许不便,改动的工作可能是重复的并且手工改动也可能造成数据不一致。 在这种情况下,使用Liquibase将有利于我们更好地管理数据。

2. Liquibase具备如下特性:

  • 不依赖于特定的数据库,目前支持包括Oracle/Sql Server/DB2/MySql/Sybase/PostgreSQL/Caché等12种数据库,这样在数据库的部署和升级环节可帮助应用系统支持多数据库。
  • 提供数据库比较功能,比较结果保存在XML中,基于该XML你可用Liquibase轻松部署或升级数据库。
  • 以XML存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet),支持数据库变化的合并,因此支持多开发人员同时工作。
  • 在数据库中保存数据库修改历史(DatabaseChangeHistory),在数据库升级时自动跳过已应用的变化(ChangSet)。
  • 提供变化应用的回滚功能,可按时间、数量或标签(tag)回滚已应用的变化。通过这种方式,开发人员可轻易的还原数据库在任何时间点的状态。
  • 可生成数据库修改文档(HTML格式)
  • 提供数据重构的独立的IDE和Eclipse插件

3. Liquibase优点:

  1. 将所有数据库的变化保存在xml文件中
  2. 不损害现有数据库,只需要少量配置,便能与spring项目集成。
  3. ChangeSet的ID+修改ChangeSet的作者标示+包含ChangeSet的文件名标识,可以避免多人协同开发的冲突

4. 工程结构

这里写图片描述

5. 需要引入jar包

这里写图片描述

6. Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	
	<!-- spring 配置 begin -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-context.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- spring 配置 end -->
	
</web-app>


7. Spring-context.xml

<!-- 引用资源文件 -->
	<context:property-placeholder location="classpath:jdbc.properties" />

<!-- 配置数据源 dbcp -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driver}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	
<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
		<property name="dataSource" ref="dataSource" />
		<property name="changeLog" value="classpath:Changelog.xml" />
	</bean>


8. Changelog.xml

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">

	<!-- 执行sql -->
	<changeSet id="sql_file" author="anniweiya">
		<sqlFile path="anniweiya.sql" />
	</changeSet>

	<!-- 新建表 -->
	<changeSet id="create_table" author="anniweiya">
		<createTable tableName="t_anniweiya_test">
			<column name="id" type="int">
				<constraints primaryKey="true" nullable="false" />
			</column>
			<column name="user" type="varchar(255)">
				<constraints nullable="false" />
			</column>
			<column name="updatetime" type="date">
				<constraints nullable="false" />
			</column>
		</createTable>
	</changeSet>

	<!-- 新增列 -->
	<changeSet id="add_column" author="anniweiya">
		<addColumn tableName="t_anniweiya_test">
			<column name="password" type="varchar(255)">
				<constraints nullable="false" />
			</column>
		</addColumn>
	</changeSet>

	<!-- 修改列类型 -->
	<changeSet id="modify_datatype" author="anniweiya">
		<modifyDataType tableName="t_anniweiya_test" columnName="password" newDataType="varchar(55)" />
	</changeSet>

	<!-- 删除列 -->
	<changeSet id="drop_column" author="anniweiya">
		<dropColumn tableName="t_anniweiya_test" columnName="updatetime" />
	</changeSet>

	<!-- 修改名 -->
	<changeSet id="modify_name" author="anniweiya">
		<renameColumn tableName="t_anniweiya_test" oldColumnName="password" newColumnName="password1" columnDataType="varchar(255)" />
	</changeSet>

	<!-- 执行sql语句 -->
	<changeSet id="t_anniweiya_test_sql" author="anniweiya">
		<preConditions onFail="MARK_RAN">
			<not>
				<columnExists tableName="t_anniweiya_test" columnName="fcreator_id" />
			</not>
		</preConditions>
		<sql>ALTER TABLE `t_anniweiya_test` Add COLUMN fcreator_id int not null AFTER `user` </sql>
	</changeSet>


</databaseChangeLog>


9. Main入口函数

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UpDataBase {
	
public static void main(String[] args) {
		
		System.out.println("start");
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "spring-context.xml"});
		System.out.println("ok");
	}
	
}

© 著作权归作者所有

a
粉丝 0
博文 11
码字总数 11589
作品 0
广州
私信 提问
liquibase一个警告信息

liquibase集成到spring-boot中,启动的时候报很多警告信息,如何去掉? 解决警告,而不是去掉log的警告 2015-12-26 11:01:36 WARN [liquibase]:101 - Current XML parsers seems to not supp...

waterWang
2015/12/26
397
1
Choerodon猪齿鱼的数据初始化设计解析

Choerodon猪齿鱼作为一个微服务框架需要解决微服务数据初始化本身具有的问题和复杂性,同时也需要满足框架本身特有的数据初始化需求,下面为大家介绍一下这方面的设计思想和实现。 微服务的数...

Choerodon
06/10
49
0
Docker 实战案例解析,实现自动化数据库迁移

出品丨Docker公司(ID:docker-cn) 编译丨小东 每周一、三、五晚6点10分 与您不见不散! 在 Phorest Salon Software 公司,我们是在 AWS 上运行我们的平台。该平台由 VPC 内的许多 AWS 资源...

docker公司
2018/08/24
0
0
LiquiBase注释怎么写

在LiquiBase的xml中怎么给table写注释,或者字段写注释?

waterWang
2015/12/25
480
1
项目管理注意事项(写给做架构的自己)

1.统一使用数据库管理工具,推荐使用liquibase,一定要保留数据模型使用powerdesign. 2.项目整体的横向扩展,考虑后期的一些添加字段,逻辑改动。 3.数据的可追溯性,删除数据考虑数据的逻辑删...

梧桐宇宇
2018/04/13
53
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
4
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
10
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
8
0
前端——使用base64编码在页面嵌入图片

因为页面中插入一个图片都要写明图片的路径——相对路径或者绝对路径。而除了具体的网站图片的图片地址,如果是在自己电脑文件夹里的图片,当我们的HTML文件在别人电脑上打开的时候图片则由于...

被毒打的程序猿
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部