Oraclespringboot集成liquibase,h2数据库

Liquibase是一个用于跟踪、管理和使用数据库变化的开源的数据库重构工具。它将富有数据库的转变(包括社团和多少)都封存在XML文件中,便于版本控制。

Liquibase具备如下特征:
* 不借助于特定的数据库,如今帮忙包涵Oracle/Sql
Server/DB2/MySql/Sybase/PostgreSQL/Caché/h2等12种数据库,那样在数据库的配备和提拔环节可扶助应用种类援救多数据库。
*
提供数据库相比较效益,相比结实保存在XML中,基于该XML你可用Liquibase轻松布署或升官数据库。
*
以XML存储数据库变化,其中以作者和ID唯一标识一个变更(ChangSet),帮衬数据库变化的联结,由此接济多开发人员同时工作。
*
在数据库中保存数据库修改历史(DatabaseChangeHistory),在数据库升级时自动跳过已运用的变通(ChangSet)。
*Oracle,
提供变化采用的回滚功效,可按时间、数量或标签(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 注入了一个数量源 DragonHAntecSource 。
  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

 

相关文章