SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx
《SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx》由会员分享,可在线阅读,更多相关《SpringBoot 04 集成Flyway实现数据库版本控制Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。
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人正在系统学习中