Spring Boot 2.x实战71 - Spring Data 15 - Spring Data JPA数据库迁移与版本控制(Flyway)

2.12.3 数据库迁移工具

Spring Boot支持的数据库迁移工具有Flyway和Liquibase。本节演示着重讲解Flyway的用法。

Spring Boot使用FlywayAutoConfiguration使用FlywayProperties来对Flyway进行自动配置,外部配置通过spring.flyway.*前缀进行。

我们首先在build.gradle添加Flyway的依赖:

dependencies {
	 //...
   runtimeOnly 'org.flywaydb:flyway-core'
   //...
}

默认自动执行在classpath:db/migration目录下的V<VERSION>__<NAME>.sql(注意中间的下划线是两个,如V1__Initial_Setup.sqlV1_1__Some_Changes.sql,VERSION内部分隔使用下划线)。

我们在src/main/resources/db/migration建立V1__Initial_Setup.sql

CREATE TABLE IF NOT EXISTS third_person(
  id bigint(20) NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  age int(11) DEFAULT NULL,
  PRIMARY KEY (id)
);

INSERT INTO third_person (name, age) VALUES ('wyf', 35);
INSERT INTO third_person (name, age) VALUES ('foo', 34);
INSERT INTO third_person (name, age) VALUES ('bar', 33);
INSERT INTO third_person (name, age) VALUES ('www', 32);

Flyway需要数据库处于空的状态,我们删除first_db所有的表以及存储过程。启动应用,在数据库为我们建了两张表:

  • flyway_schema_history:用来记录数据库演进历史;

在这里插入图片描述

  • third_person

    在这里插入图片描述

我们在src/main/resources/db/migration建立V1_1__Some_Changes.sql对数据库进行一些修改:

ALTER TABLE third_person add COLUMN city varchar(255) NOT NULL;

UPDATE third_person set city = 'hefei';

再次启动应用:

  • flyway_schema_history

在这里插入图片描述

  • third_person

    在这里插入图片描述

我们第一个V1__Initial_Setup.sql版本为1,在Flyway称之为基线版本,默认也为1,我们可过spring.flyway.baseline-version来设置;Flyway默认连接当前数据库,如果我们要初始化到另外的数据库,可使用spring.flyway.schemas来设置。

新书推荐:

我的新书《从企业级开发到云原生微服务:Spring Boot 实战》已出版,内容涵盖了丰富Spring Boot开发的相关知识
购买地址:https://item.jd.com/12760084.html
在这里插入图片描述
主要包含目录有:

第一章 初识Spring Boot(快速领略Spring Boot的美丽)
第二章 开发必备工具(对常用开发工具进行介绍:包含IntelliJ IDEA、Gradle、Lombok、Docker等)
第三章 函数式编程
第四章 Spring 5.x基础(以Spring 5.2.x为基础)
第五章 深入Spring Boot(以Spring Boot 2.2.x为基础)
第六章 Spring Web MVC
第七章 数据访问(包含Spring Data JPA、Spring Data Elasticsearch和数据缓存)
第八章 安全控制(包含Spring Security和OAuth2)
第九章 响应式编程(包含Project Reactor、Spring WebFlux、Reactive NoSQL、R2DBC、Reactive Spring Security)
第十章 事件驱动(包含JMS、RabbitMQ、Kafka、Websocket、RSocket)
第11章 系统集成和批处理(包含Spring Integration和Spring Batch)
第12章 Spring Cloud与微服务
第13章 Kubernetes与微服务(包含Kubernetes、Helm、Jenkins、Istio)
多谢大家支持。

猜你喜欢

转载自blog.csdn.net/wiselyman/article/details/106657503