栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java > SpringBoot

Spring Boot2中使用Liquibase管理数据库

SpringBoot 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Boot2中使用Liquibase管理数据库

Spring Boot2中使用Liquibase管理数据库

在Activiti工作流开源软件中使用到了liquibse来初始化数据库,我们这里带大家了解体验一下liquibase

Liquibase简介

Liquibase是一个数据库表结构迭代演进变更的管理工具。开发人员可以不是直接针对某个特定的数据库编写SQL的创建、更新或删除数据库对象,而是在通过XML、YAML、JSON等文件中定义描述他们所需的数据库表结构的变更这些变更可以包含tables,views,columns,indexes,foreignkeys,primarykeys,uniqueconstraints,data。

对数据库的任何更改都会以变更集(ChangeSet)来描述中,Liquibase推荐的做法是每次修改构建一个变更集,以便通过变更集轻松回滚。也可以通过tag对数据库进行更改。比如,在首次发布后将数据库结构标记为1.0。稍后,当发布一些补丁并发布版本1.1时,可以将到目前为止的所有更改标记为1.1。借助这些标记,可以轻松地将数据库结构回滚到某个版本

Liquibase特性
  • 不依赖特定数据库,像Hibernate一样支持几乎所有的主流数据库如MySql,Oracle,PostgreSQL,H2等等
  • 支持数据库的操作非常丰富,如创建或修改表(table)、视图(views)、索引(index)以及数据(data)等
  • 对数据库的变更描述支持多种格式XML、YAML、JSON等
  • 可以记录数据库的变更历史,是通过创建特定的表结果来实现这个功能
  • 可以diff两个数据库的差异
  • 可以轻松的把比如mysql库导出其他支持数据库的sql脚本
  • 支持java命令、Maven、Gradle、Spring Boot集成运行
  • 提供了Eclipse和IDEA的数据库重构插件,但是多年未更新不推荐使用

在Spring Boot2项目中使用

1.创建工程

我们通过curl start.spring.io快速创建这个工程,主要注意添加liquibase这个依赖,另外我们通过h2数据库快速演示数据库的操作,保证系统简单外部依赖,能快速启动。

curl https://start.spring.io/starter.tgz -d dependencies=web,data-jpa,h2,liquibase -d type=maven-project -d baseDir=dbdemo | tar -xzvf -

通过脚本创建一个标准的spring boot工程,可以看一下生产的目录结构

├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │└── example
    │   │    └── demo
    │   │ └── DemoApplication.java
    │   └── resources
    │├── application.properties
    │├── static
    │└── templates
    └── test
 └── java
     └── com
  └── example
      └── demo
   └── DemoApplicationTests.java
 

重点关注一下工程的pom依赖

		
			org.springframework.boot
			spring-boot-starter-data-jpa
		
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.liquibase
			liquibase-core
		

		
			com.h2database
			h2
			runtime
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

当spring boot系统默认依赖了liquibase后系统直接通过mvn spring-boot:run启动的时候就会启动失败,报错如下:

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.0.6.RELEASE:run (default-cli) on project demo: An exception occurred while running. null: InvocationTargetException: Error creating bean with name 'org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration$LiquibaseConfiguration': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Cannot find changelog location: class path resource [db/changelog/db.changelog-master.yaml] (please add changelog or check your Liquibase configuration) -> [Help 1]

这个错误提示说明我们系统开启liuibase的功能但是对应数据库的的chagelog文件,这里提示的默认changelog文件为 db/changelog/db.changelog-master.yaml,我们可以通过配置
spring.liquibase.enabled=false关闭liquibase的功能,当然这里我们要演示liquibase肯定不能选择直接关闭
,上面提到liquibase支持xml,yaml,json可以看到spring boot项目默认使用了yml格式,我们就遵循“约定大于配置”的原则我们也采用yaml格式演示

2.配置db/changelog/db.changelog-master.yaml

这里参考liquibase官网的一段yaml配置 yaml_format,内容和官网不完全一样,为避免运行问题大家采用下面的yaml内容配置

databaseChangeLog:
  - changeSet:
      id: 1
      author: nvoxland
      changes:
 - createTable:
     tableName: person
     columns:
- column:
    name: id
    type: int
    autoIncrement: true
    constraints:
      primaryKey: true
      nullable: false
- column:
    name: firstname
    type: varchar(50)
- column:
    name: lastname
    type: varchar(50)
    constraints:
      nullable: false
- column:
    name: state
    type: char(2)

  - changeSet:
      id: 2
      author: nvoxland
      changes:
 - addColumn:
     tableName: person
     columns:
- column:
    name: username
    type: varchar(8)

  - changeSet:
      id: 3
      author: nvoxland
      changes:
 - addLookupTable:
     existingTableName: person
     existingColumnName:state
     newTableName: state
     newColumnName: id
     newColumnDataType: char(2)

简单分析这个端yaml文件,这是liquibase的yaml配置文件,在liquibase定义的数据库变化采用changeSet来表示,这里涉及到3个changeSet,1是创建一个person表,2是为person添加一列为username,3是添加一个state表作为person表中state字段的约束来源

3.配置application.yml或application.properties
spring:
  h2:
    console:
      enabled: true
  datasource:
    url: jdbc:h2:file:~/.h2/testdb

我们采用最小的配置一下数据源相关信息,因为我们演示选中的是h2数据库,所以配置一下spring.h2.console.enabled=true开启一下web数据库管理器

4.启动系统查看数据库

现在通过可以启动我们的程序 mvn spring-boot:run,等程序启动完成,打开浏览器访问 http://localhost:8080/h2-console , 这是一个web版的数据管理器支持中文界面,

选择数据库类型Generic H2(Embedded)输入访问数据库的常规配置,点击连接进去操作界面可以看到有四个表

show tables;

TABLE_NAME  	TABLE_SCHEMA  
DATAbaseCHANGELOG	PUBLIC
DATAbaseCHANGELOGLOCK	PUBLIC
PERSON	PUBLIC
STATE	PUBLIC

我们的yaml配置中说明了创建person和state表,另外两个表示liquidbase的记录表,在spring boot集成的liquibase默认集成了最基本的功能也就是update数据的变化

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/234630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号