Liquibase是一个用于跟踪、管理和应用数据库变化的开源的数据库重构工具。它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制。

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

Liquibase的核心就是存储变化的XML

其中,changeSet包含不同的数据库变化,几乎涵盖了所有的数据库变化类型,具体支持的类型要看API,我这里给几个例子:
* 创建和删除表、视图、存储过程、主键、外键、索引等
* 重命名表、视图、列等
* 加入列缺省值、唯一约束、非空约束等
* 合并两个列
* 在一个表的数据的基础上创建一个字典表
除此之外,Liquibase还允许你运行自己的Sql脚本、执行Shell程序。

springboot集成liquibase

1.添加依赖

  springboot内置了对liquibase整合的支持,我们只需要在项目中引入liquibase的依赖,进行配置即可。
  在pom文件中添加以下依赖:

 <dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>

2.配置application.properties(或application.yml)文件

 liquibase.change-log=classpath:changeLog.xml  //存储变化的xml文件的位置
liquibase.user=sa //访问数据库的用户名
liquibase.password= //访问数据库的密码
liquibase.url=jdbc:h2:file:~/.h2/testdb //访问数据库的连接地址
liquibase.enabled=true //启用liquibase
liquibase.drop-first=false //默认为false,如果设置为true,liquibase将首先删除所有数据库对象的所有连接的用户。

3.编写存储变化的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-3.4.xsd"> <property name="autoIncrement" value="true" dbms="h2"/>
<changeSet id="init-schema" author="jinzhe" >
<comment>init schema</comment>
<createTable tableName="user">
<column name="id" type="bigint" autoIncrement="${autoIncrement}">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="username" type="varchar(20)" >
<constraints nullable="false" uniqueConstraintName="username"/>
</column>
<column name="password" type="varchar(20)">
<constraints nullable="false"/>
</column>
<column name="email" type="varchar(20)">
<constraints nullable="false"/>
</column>
<column name="phone" type="varchar(11)">
<constraints nullable="false"/>
</column>
<column name="sex" type="varchar(2)">
<constraints nullable="false"/>
</column>
<column name="create_time" type="java.util.Date">
<constraints nullable="false"/>
</column>
<column name="update_time" type="java.util.Date">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
</databaseChangeLog>

4.启动项目

浏览器输入 http://localhost:8080/h2-console ,然后输入用户名和密码,发现此时表已经建好。

5.除此之外,我们还可以通过自己创建SpringLiquibase的方式,来执行change-log文件中的内容。

 @Configuration
@EnableConfigurationProperties(LiquibaseProperties.class)
public class DataSourceConfig {
@Bean
public DataSource dragonHADataSource() throws Exception {
return new DragonHADatasourceBuilder().build("dragon/dragon-ha-config.xml");
}
@Bean
public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) throws Exception{
SpringLiquibase liquibase=new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog(liquibaseProperties.getChangeLog());
liquibase.setShouldRun(liquibaseProperties.isEnabled());
liquibase.setDropFirst(liquibaseProperties.isDropFirst());
return liquibase;
}
}

  在这里我们为 SpringLiquibase 注入了一个数据源 DragonHADataSource 。
  SpringLiquibase实现 InitializingBean 接口,覆写了 afterPropertiesSet() 方法,这个方法是 change-log 文件处理的入口。

6.集成h2数据库

  在 application.properties 文件(或者 application.yml 文件)中添加以下设置:

 #thymeleaf模板设置
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false #h2数据库设置
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url = jdbc:h2:file:~/.h2/testdb
spring.h2.console.enabled=true #liquibase设置
liquibase.change-log=classpath:changelog/init.xml
liquibase.user=sa
liquibase.password=
liquibase.url=jdbc:h2:file:~/.h2/testdb
liquibase.enabled=true
liquibase.drop-first=true

   在h2数据库设置里应该通过 spring.jpa.hibernate.ddl-auto=none 关闭hibernate的数据库自动创建|更新|验证数据库表结构功能,此时,liquibase和h2数据库使用同一个数据源。

这样,每次重启项目的时候,都可以进行CURD操作,但是重启项目数据都会初始化,方便开发者使用。

参考:https://segmentfault.com/a/1190000007002140

http://blog.csdn.net/liuchuanhong1/article/details/54629967

springboot集成liquibase,h2数据库的更多相关文章

  1. springboot中使用h2数据库(内存模式)

    使用H2的优点,不需要装有服务端和客户端,在项目中包含一个jar即可,加上初始化的SQL就可以使用数据库了 在springboot中引入,我的版本是2.1.4,里面就包含有h2的版本控制 <!- ...

  2. java~springboot~h2数据库在单元测试中的使用

    单元测试有几点要说的 事实上springboot框架是一个tdd框架,你在进行建立项目时它会同时建立一个单元测试项目,而我们的代码用例可以在这个项目里完成,对于单元测试大叔有以下几点需要说明一下: 单 ...

  3. springboot集成h2

    h2数据库是常用的开源数据库,与HSQLDB类似,十分适合作为嵌入式数据库使用,其他的数据库大部分都需要安装独立的客户端和服务器端 h2的优势: (1)h2采用纯java编写,因此不受平台的限制 (2 ...

  4. springBoot 集成Mysql数据库

    springBoot 集成Mysql数据库 前一段时间,我们大体介绍过SpringBoot,想必大家还有依稀的印象.我们先来回顾一下:SpringBoot是目前java世界最流行的一个企业级解决方案框 ...

  5. spring boot2.x中集成H2数据库

    H2数据库介绍  查看 在spring boot中集成 1.添加依赖 <dependency> <groupId>org.springframework.boot</gr ...

  6. SpringBoot集成mybatis,同时读取一个数据库中多个数据表

    SpringBoot集成mybatis,同时读取一个数据库中多个数据表: application.properties: mybatis.config-location=classpath:mybat ...

  7. spring security关闭http验证 和 springboot 使用h2数据库

    spring security关闭http验证 最近在跑demo的过程中,访问swagger页面的时候需要验证登录,记得在之前写的代码中是关闭了security验证,无需登录成功访问,直接在appli ...

  8. springboot集成jpa操作mybatis数据库

    数据库如下 CREATE TABLE `jpa`.`Untitled` ( `cust_id` bigint() NOT NULL AUTO_INCREMENT, `cust_address` var ...

  9. 图数据库Neo4j的基本使用及与SpringBoot集成

    Neo4j 官网地址:https://neo4j.com/ 下载地址:https://neo4j.com/download-center/#community 官方入门文档:https://neo4j ...

随机推荐

  1. MVC你是怎样理解的?

    近期的学术交流会议都在研究MVC,秉着好好学习,天天向上的心理,时不时的就去蹭会.说实话,原来也有看过MVC的一些相关资料,可是仅仅是浅尝辄止.并且,由于先学了三层,所以再看MVC的时候,潜意识里的就 ...

  2. 【private HibernateTemplate template;】 的作用

    [private HibernateTemplate template;] 的作用 这个是在spring中定义了一个bean,它是org.springframework.orm.hibernate3. ...

  3. lucene 多索引目录搜索实现方法

    http://akululu.iteye.com/blog/314130 多索引目录就是要在多个索引目录的中进行比较搜索,类似概念在SQL中就是select * from TableA union s ...

  4. 单例模式获取JDBC连接

    package com.jdbc.test; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...

  5. Android - 返回上一个界面finish()方法

    返回上一个界面finish()方法 本文地址: http://blog.csdn.net/caroline_wendy Android能够使用finish()方法,实现函数返回的功能.当不是Activ ...

  6. ORCAD常见DRC错误

    一下就是网上整理的: https://blog.csdn.net/weixin_39671078/article/details/85344762 https://wenku.baidu.com/vi ...

  7. mac os x 使用scp取代sz rz

    在windows下,能够通过secureCRT的sz来下载文件,而用rz来上传文件.在unix/linux下则不必.由于scp命令能够完毕这项目工作. sz file替代方案为:scp usernam ...

  8. Vivado 与 Modelsim 联合仿真

    1 编译库 用命令行 用vivado工具 vivado 有很多 IP核的接口 已经与 ISE的核 不太一样了,比如fir ,接口就是这样的: fir_lp fir_lp_ip(    .aclk  ( ...

  9. 如何高效利用github提升自己

    作为开源代码库以及版本控制系统,Github拥有超过900万开发者用户,是开发者打开程序开源大门的一扇窗口,也是开发者快速提升自己的一个重要途径.本文将从两个方面介绍github的使用方式. 和逛微博 ...

  10. Windows 8 64bit Xilinx ISE(14.7) Fix License

    http://www.youtube.com/watch?v=ttPbEcNjdo8 It can work successfully!