SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx

上传人:b****6 文档编号:17497458 上传时间:2022-12-06 格式:DOCX 页数:13 大小:17.66KB
下载 相关 举报
SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx_第1页
第1页 / 共13页
SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx_第2页
第2页 / 共13页
SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx_第3页
第3页 / 共13页
SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx_第4页
第4页 / 共13页
SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx

《SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx》由会员分享,可在线阅读,更多相关《SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx

Oracle,SQLServer,SQLAzure,DB2,DB2z/OS,MySQL(includingAmazonRDS),MariaDB,GoogleCloudSQL,PostgreSQL(includingAmazonRDSandHeroku),Redshift,Vertica,H2,Hsql,Derby,SQLite,SAPHANA,solidDB,SybaseASEandPhoeni

官网链接:

Homepage-Flyway

Flyway是如何工作的?

可以查看之前的一篇译文,这里就不再重复了,本文主要介绍Springboot如何集成flyway

【译文】数据库管理工具Flyway_学然后知不足!

-CSDN博客

2.SpringBoot集成Flyway

2.1容易示例

参考版本信息

示例信息版本

springboot2.6.2

flyway7.15.0

mysql5.7.30

参考名目结构

1.创建SpringBoot应用,并添加flyway-core依靠,本例中将实现初始化脚本到mysql数据库,因此同时引入了驱动依靠mysql-connector-java

org.flywaydb

flyway-core

7.15.0

参考pom.xml依靠如下

org.springframework.boot

spring-boot-starter

spring-boot-starter-test

test

spring-boot-starter-jdbc

mysql

mysql-connector-java

8.0.28

org.junit.jupiter

junit-jupiter-api

5.8.2

2.在application.properties中设置flyway信息

server.port=7002

是否启动,默认开启

spring.flyway.enabled=true

脚本存放路径

spring.flyway.locations=classpath:

db/migration

当flyway第一次运行时,会在我们对应的数据库中新建一个记录脚本运行状况的

spring.flyway.table=flyway_schema_history

flyway指向的数据库链接

spring.datasource.url=jdbc:

mysql:

//127.0.0.1:

3306/runoob?

useUnicode=true&

amp;

characterEncoding=utf8

用户名

spring.flyway.user=nacos

密码

spring.flyway.password=nacos

数据库驱动

spring.flyway.driver-class-name=com.mysql.cj.jdbc.Driver

3.脚本收拾

将脚本收拾到resource/db.migration路径下,例如

参考SQL脚本信息如下

//V1.20190621.1854__CREATE_PERSION_TABLE.sql脚本内容

createtablePERSON(

IDintnotnull,

NAMEvarchar(100)notnull

);

//V1.20190621.1904__INIT_PERSION.sql脚本内容

insertintoPERSON(ID,NAME)values(1,&

39;

Axel&

);

insertintoPERSON(ID,NAME)values(2,&

Mr.Foo&

insertintoPERSON(ID,NAME)values(3,&

Ms.Bar&

sql名目中存放脚本文件,脚本名称命名方式

版本化迁移:

执行一遍,版本号唯一,有重复会报错:

格式:

V+版本号+双下划线+描述+结束符

重复的迁移,不需要版本号,脚本发生变幻启动就会执行:

R+双下划线+描述+结束符

撤消迁移:

U+版本号+双下划线+描述+结束符

4.运行启动主类,运行日志如下,从日志中可以看到如下信息

启动后正确链接到数据库runoob

验证2个迁移脚本胜利

用法指令行的方式创建了一张名称为flyway_schema_history的记录表,这里要注重,全部脚本一旦执行了就会在flyway_schema_history中创建记录,假如出错引发问题,可以删除表中记录,反正启动的时候还会再执行,固然生产环境不建议此办法,但生产环境上部署的包都是验证过无问题的包也不会浮现此问题

执行了resource/db.migration名目下的两个脚本,并执行胜利

INFO190688---[main]o.f.c.internal.license.VersionPrinter:

FlywayCommunityEdition7.15.0byRedgate

INFO190688---[main]o.f.c.i.database.base.BaseDatabaseType:

Database:

jdbc:

3306/runoob(MySQL5.7)

INFO190688---[main]mand.DbValidate:

Successfullyvalidated2migrations(executiontime00:

00.016s)

INFO190688---[main]o.f.c.i.s.JdbcTableSchemaHistory:

CreatingSchemaHistorytable&

mdash;

&

runoob&

flyway_schema_history&

withbaseline

INFO190688---[main]mand.DbBaseline:

Successfullybaselinedschemawithversion:

1

INFO190688---[main]mand.DbMigrate:

Currentversionofschema&

Migratingschema&

toversion&

quot;

1.20190621.1854-CREATEPERSIONTABLE&

1.20190621.1904-INITPERSION&

Successfullyapplied2migrationstoschema&

,nowatversionv1.20190621.1904(executiontime00:

00.225s)

停止服务后,重新运行日志如下,从日志中可以看到信息

本次没有重复执行脚本,日志中打印当前脚本编号20190621.1904,即最后1次执行的脚本

INFO193184---[main]o.f.c.internal.license.VersionPrinter:

INFO193184---[main]o.f.c.i.database.base.BaseDatabaseType:

INFO193184---[main]mand.DbValidate:

Successfullyvalidated3migrations(executiontime00:

00.024s)

INFO193184---[main]mand.DbMigrate:

1.20190621.1904

Schema&

isuptodate.Nomigrationnecessary.

查看Mysql数据库

2.2常见问题

1.Causedby:

org.flywaydb.core.api.FlywayException:

Foundnon-emptyschema(s)

Causedby:

Foundnon-emptyschema(s)&

butnoschemahistorytable.Usebaseline()orsetbaselineOnMigratetotruetoinitializetheschemahistorytable.

atorg.flywaydb.core.Flyway$1.execute(Flyway.java:

200)&

[flyway-core-7.15.0.jar:

na]

170)&

atorg.flywaydb.core.Flyway.execute(Flyway.java:

586)&

问题缘由:

第一执行的时候没有找到schemahistorytable,这张表其实就是application.properties文件中spring.flyway.table属性配置的表,因此要么用法指令创建一个或者在application.properties文件中设置spring.flyway.baseline-on-migrate=true,

2.Causedby:

UnsupportedDatabase:

MySQL5.7

atorg.flywaydb.core.internal.database.DatabaseTypeRegister.getDatabaseTypeForConnection(DatabaseTypeRegister.java:

106)&

[flyway-core-8.4.2.jar:

atorg.flywaydb.core.internal.jdbc.JdbcConnectionFactory.(JdbcConnectionFactory.java:

75)&

atorg.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:

143)&

atorg.flywaydb.core.Flyway.migrate(Flyway.java:

124)&

flyway-core对数据库版本有要求,例如flyway-core的当前最高版本V8.4.3,不能用法MySQL5.7,当flyway-core降低到V7.15.0后问题解决,所以匹配flyway-core和数据库版本后问题即可解决

2.3源码参考

链接:

源码参考Demo-flyway

文章总结

本文介绍了Springboot集成flyway方式

用法Flyway之前部署脚本方式普通为开发人员根据挨次汇总数据库的升级脚,然后DBA或者售后在生产库中根据挨次执行升级脚本。

用法Flyway之后部署脚本方式就变更为开发人员将脚本构建到程序包中,部署程序包后启动时Flyway自动执行脚本升级

前一篇:

SpringBoot03大事监听处理

文章学问点与官方学问档案匹配,可进一步学习相关学问

Java技能树用法JDBC操作数据库JDBC概述6686人正在系统学习中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1