zoukankan      html  css  js  c++  java
  • springboot集成liquibase,h2数据库

    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文件中添加以下依赖:

    1 <dependency>
    2         <groupId>org.liquibase</groupId>
    3         <artifactId>liquibase-core</artifactId>
    4 </dependency>

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

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

    3.编写存储变化的xml文件

      文件位置与配置文件上位置一致,例如:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <databaseChangeLog
     3         xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
     4         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     5         xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
     6         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
     7 
     8     <property name="autoIncrement" value="true" dbms="h2"/>
     9     <changeSet id="init-schema" author="jinzhe" >
    10         <comment>init schema</comment>
    11         <createTable tableName="user">
    12             <column name="id" type="bigint" autoIncrement="${autoIncrement}">
    13                 <constraints primaryKey="true" nullable="false"/>
    14             </column>
    15             <column name="username" type="varchar(20)" >
    16                 <constraints  nullable="false" uniqueConstraintName="username"/>
    17             </column>
    18             <column name="password" type="varchar(20)">
    19                 <constraints  nullable="false"/>
    20             </column>
    21             <column name="email" type="varchar(20)">
    22                 <constraints  nullable="false"/>
    23             </column>
    24             <column name="phone" type="varchar(11)">
    25                 <constraints  nullable="false"/>
    26             </column>
    27             <column name="sex" type="varchar(2)">
    28                 <constraints  nullable="false"/>
    29             </column>
    30             <column name="create_time" type="java.util.Date">
    31                 <constraints  nullable="false"/>
    32             </column>
    33             <column name="update_time" type="java.util.Date">
    34                 <constraints  nullable="false"/>
    35             </column>
    36         </createTable>
    37     </changeSet>
    38 </databaseChangeLog>

    4.启动项目

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

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

     1 @Configuration
     2 @EnableConfigurationProperties(LiquibaseProperties.class)
     3 public class DataSourceConfig {
     4     @Bean
     5     public DataSource dragonHADataSource() throws Exception {
     6         return new DragonHADatasourceBuilder().build("dragon/dragon-ha-config.xml");
     7     }
     8     @Bean
     9     public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) throws Exception{
    10         SpringLiquibase liquibase=new SpringLiquibase();
    11         liquibase.setDataSource(dataSource);
    12         liquibase.setChangeLog(liquibaseProperties.getChangeLog());
    13         liquibase.setShouldRun(liquibaseProperties.isEnabled());
    14         liquibase.setDropFirst(liquibaseProperties.isDropFirst());
    15         return liquibase;
    16     }
    17 }

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

    6.集成h2数据库

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

     1 #thymeleaf模板设置
     2 spring.thymeleaf.mode=HTML5
     3 spring.thymeleaf.encoding=UTF-8
     4 spring.thymeleaf.content-type=text/html
     5 spring.thymeleaf.cache=false
     6 
     7 #h2数据库设置
     8 spring.jpa.show-sql=true
     9 spring.jpa.hibernate.ddl-auto=none
    10 spring.datasource.url = jdbc:h2:file:~/.h2/testdb
    11 spring.h2.console.enabled=true
    12 
    13 #liquibase设置
    14 liquibase.change-log=classpath:changelog/init.xml
    15 liquibase.user=sa
    16 liquibase.password=
    17 liquibase.url=jdbc:h2:file:~/.h2/testdb
    18 liquibase.enabled=true
    19 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

  • 相关阅读:
    WINCE创建快捷方式
    Android初级开发第四讲系统中一些属性的区别
    Android初级开发第六讲Activity的布局
    Android初级开发第三讲项目中控件的学习
    物联网产业链及市场分
    读《浪潮之巅》有感
    Hello China V1.75成功运行于Lenovo超级本上
    Android初级开发第七讲特效和数据传递处理
    Android中级第二讲制作搜索页面,使用TextWatcher
    电信运营商物联网实践建议
  • 原文地址:https://www.cnblogs.com/jin-zhe/p/8203890.html
Copyright © 2011-2022 走看看