数据库管理与迁移(Liquibase)
SpringBoot是为了简化Spring应用的创建、运行、调试、部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖就可以轻易的搭建出一个 WEB 工程
目前 Spring Boot 支持较好的两款工具分别是 flyway、liquibase,支持 sql script,在初始化数据源之后执行指定的脚本代码或者脚本文件,本章基于 Liquibase…
Liquibase
LiquiBase 是一个用于数据库重构和迁移的开源工具,通过 changelog文件 的形式记录数据库的变更,然后执行 changelog文件 中的修改,将数据库更新或回滚到一致的状态。
主要特点
- 支持几乎所有主流的数据库,如MySQL、PostgreSQL、Oracle、Sql Server、DB2等
- 支持多开发者的协作维护;
- 日志文件支持多种格式;如XML、YAML、SON、SQL等
- 支持多种运行方式;如命令行、Spring 集成、Maven 插件、Gradle 插件等
在平时开发中,无可避免测试库增加字段或者修改字段以及创建表之类的,环境切换的时候如果忘记修改数据库那么肯定会出现 不可描述的事情 ,这个时候不妨考虑考虑Liquibase。
官方文档:http://www.liquibase.org/documentation/index.html
本章目标
利用 Spring Boot 集成 Liquibase,避免因粗心大意导致环境迁移时缺少字段….
导入依赖
依赖 spring-boot-starter-jdbc 目的是为了让 liquibase 能够获得 datasource ,这里换成 mybatis、hibernate 等也是一样,主要偷懒不想写配置….
1 |
<dependencies> |
属性配置
只要依赖了 liquibase-core 默认可以不用做任何配置,但还是需要知道默认配置值是什么,这样方便定位和解决问题
1 |
spring.datasource.driver-class-name=com.mysql.jdbc.Driver |
更多配置
spring.liquibase.change-log配置文件的路径,默认值为classpath:/db/changelog/db.changelog-master.yamlspring.liquibase.check-change-log-location检查change log的位置是否存在,默认为true.spring.liquibase.contexts用逗号分隔的运行环境列表。spring.liquibase.default-schema默认数据库schemaspring.liquibase.drop-first是否先drop schema(默认false)spring.liquibase.enabled是否开启liquibase(默认为true)spring.liquibase.password数据库密码spring.liquibase.url要迁移的JDBC URL,如果没有指定的话,将使用配置的主数据源.spring.liquibase.user数据用户名spring.liquibase.rollback-file执行更新时写入回滚的 SQL文件
db.changelog-master.yaml
1 |
databaseChangeLog: |
test1.sql
1 |
INSERT INTO `person` (`id`, `first_name`, `last_name`) VALUES ('2', '哈哈', '呵呵');
|
上面的
yaml文件其实就是从下面的XML演变而来的,官方是支持xml,yaml,json三种格式,写法也比较简单
传送门(官方给出了三种写法格式,依样画葫芦就可以了):http://www.liquibase.org/documentation/changes/sql_file.html
1 |
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
主函数
1 |
package com.battcn; import org.springframework.boot.SpringApplication; |
测试
1.启动Chapter23Application.java中的main方法
Liquibase启动日志
从日志中可以看到Liquibase 在帮我们执行定义好的SQL,如果是第一次启动,那么数据库会存在databasechangelog 和 databasechangeloglock两种表,从名字就可以看出,故而不作过多解释
日志表
2.SQL中的语法是创建一张person表和 两次 INSERT 操作
SQL执行记录
数据库管理与迁移(Liquibase)的更多相关文章
- SpringBoot数据库管理 - 用Liquibase对数据库管理和迁移?
Liquibase是一个用于用于跟踪.管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(ro ...
- SpringBoot数据库管理 - 用flyway对数据库管理和迁移
上文介绍了Liquibase,以及和SpringBoot的集成.除了Liquibase之外,还有一个组件Flyway也是经常被使用到的类似的数据库版本管理中间件.本文主要介绍Flyway, 以及Spr ...
- 详细介绍Spring Boot 2.0的那些新特性与增强
以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...
- Spring Boot 2.0 新特性和发展方向
以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...
- 【2.0新特性】Spring Boot 2.0新特性
以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Java 6 和 7 不再支持. 内嵌容器包结构调整 为了支持reactive使用场景,内嵌的容器包结构被重构了 ...
- Spring Boot实践——Spring Boot 2.0 新特性和发展方向
出自:https://mp.weixin.qq.com/s/EWmuzsgHueHcSB0WH-3AQw 以Java 8 为基准 Spring Boot 2.0 要求Java 版本必须8以上, Jav ...
- Apsara Clouder云计算技能认证:云数据库管理与数据迁移
一.课程介绍 二.云数据库的简介及使用场景 1.云数据库简介 1.1特点: 用户按存储容量和带宽的需求付费 可移植性 按需扩展 高可用性(HA) 1.2阿里云云数据库 RDS 稳定可靠,可弹性伸缩的在 ...
- SpringBoot--数据库管理与迁移(LiquiBase)
随着开发时间积累,一个项目会越来越大,同时表结构也越来越多,管理起来比较复杂,特别是当想要把一个答的项目拆分成多个小项目时,表结构拆分会耗很大的精力:如果使用LiquiBase对数据库进行管理,那么就 ...
- Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程.也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB.往下看我们告诉你为什么这样做.为什么要用Mari ...
随机推荐
- Java实现 LeetCode 398 随机数索引
398. 随机数索引 给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引. 您可以假设给定的数字一定存在于数组中. 注意: 数组大小可能非常大. 使用太多额外空间的解决方案将不会通过测试 ...
- java实现第三届蓝桥杯星期几
星期几 1949年的国庆节(10月1日)是星期六. 今年(2012)的国庆节是星期一. 那么,从建国到现在,有几次国庆节正好是星期日呢? 只要答案,不限手段! 可以用windows日历,windows ...
- java实现第七届蓝桥杯平方圈怪
平方圈怪 题目描述 如果把一个正整数的每一位都平方后再求和,得到一个新的正整数. 对新产生的正整数再做同样的处理. 如此一来,你会发现,不管开始取的是什么数字, 最终如果不是落入1,就是落入同一个循环 ...
- 【CSS】电脑、移动端公用样式
电脑端: /* Public */ @charset "utf-8"; html, body, div, p, ul, ol, li, dl, dt, dd, h1, h2, h3 ...
- DDD之4聚合和聚合根
聚合就是归类的意思,把同类事物统一处理: 聚合根也就是最抽象,最普遍的特性: 背景 领域建模的过程回顾: 那么问题来了? 为什么要在限界上下文和实体之间增加聚合和聚合根的概念,即作用是什么? 如何设计 ...
- .NetCore对接各大财务软件凭证API——用友系列(2)
一. 前言 今天我们继续来分析用友系列的第二个产品--U8Cloud2.5 ,apilink方式的API.官网的API文档地址如下:U8API文档 因为我们主要是凭证对接,所以使用到的模块有总账.基础 ...
- html中隐藏域hidden
基本语法: <input type="hidden" name="field_name" value="value"> 作用: ...
- linux安装QT-Designer两种方法
1.安装Qt-Creator, Qt-Creator自带了qt-designer 2.安装qt5-default,qttools5-dev-tools
- Jquery封装: WebSocket插件
1 $(function() { var websocket = null; //浏览器是否支持websocket if ("WebSocket" in window) { try ...
- [博主推荐]如何利用注册 的 bug 来疯狂注册,不停开小号"做"事情,支持 手机号&邮箱
[博主推荐]如何利用注册 的 bug 来疯狂注册,不停开小号"做"事情,支持 手机号&邮箱 非常简单 1.手机号注册: 用手机号注册 网站基本都支持 可以用推荐的网址: ...