做推送的网站推荐,二学一做专题网站,网站ui设计用什么软件做,做可视化的网站为什么使用Flyway最简单的一个项目是一个软件连接到一个数据库#xff0c;但是大多数项目中我们不仅要处理我们开发环境的副本#xff0c;还需要处理其他很多副本。例如#xff1a;开发环境、测试环境、生产环境。想到数据库管理#xff0c;我们立刻就能想到一系列问题如何…为什么使用Flyway最简单的一个项目是一个软件连接到一个数据库但是大多数项目中我们不仅要处理我们开发环境的副本还需要处理其他很多副本。例如开发环境、测试环境、生产环境。想到数据库管理我们立刻就能想到一系列问题如何快速收集执行脚本的清单执行的脚本总要人工执行是否可以通过机器执行执行的脚本是否已经在数据库执行过执行的脚本是否全部在数据库中执行过执行的脚本如何回退如何初始化一个空数据库实例Flyway是一款数据库版本控制管理工具它可以简单的、可靠的升级你的数据库。它能帮助解决上面的问题。Flyway核心是记录所有版本演化和状态的MetaData首次启动创建默认名为SCHEMA_VERSION的元素表。表中保存了版本描述要执行的sql脚本等信息。Flyway已经支持数据库包括:Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS, MySQL (including Amazon RDS), MariaDB, Google Cloud SQL, PostgreSQL (including Amazon RDS and Heroku), Redshift, Vertica, H2, Hsql, Derby, SQLite, SAP HANA, solidDB, Sybase ASE and Phoeni官网链接https://flywaydb.org/SpringBoot集成Flyway2.1 简单示例参考版本信息参考目录结构1.创建SpringBoot应用并添加flyway-core依赖本例中将实现初始化脚本到mysql数据库因此同时引入了驱动依赖mysql-connector-javadependency groupIdorg.flywaydb/groupId artifactIdflyway-core/artifactId version7.15.0/version /dependency参考pom.xml依赖如下dependencies dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-test/artifactId scopetest/scope /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-jdbc/artifactId /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId version8.0.28/version /dependency dependency groupIdorg.flywaydb/groupId artifactIdflyway-core/artifactId version7.15.0/version /dependency dependency groupIdorg.junit.jupiter/groupId artifactIdjunit-jupiter-api/artifactId version5.8.2/version scopetest/scope /dependency /dependencies2.在application.properties中设置flyway信息server.port7002 ##是否启动,默认开启 spring.flyway.enabled true ##脚本存放路径 spring.flyway.locations classpath:db/migration ##当flyway第一次运行时会在我们对应的数据库中新建一个记录脚本运行情况的 spring.flyway.tableflyway_schema_history ## flyway指向的数据库链接 spring.datasource.urljdbc:mysql://127.0.0.1:3306/runoob?useUnicodetruecharacterEncodingutf8 ## 用户名 spring.flyway.usernacos ## 密码 spring.flyway.passwordnacos ## 数据库驱动 spring.flyway.driver-class-namecom.mysql.cj.jdbc.Driver3.脚本整理将脚本整理到resource/db.migration路径下例如参考SQL脚本信息如下//V1.20190621.1854__CREATE_PERSION_TABLE.sql脚本内容 create table PERSON ( ID int not null, NAME varchar(100) not null ); //V1.20190621.1904__INIT_PERSION.sql 脚本内容 insert into PERSON (ID, NAME) values (1, Axel); insert into PERSON (ID, NAME) values (2, Mr. Foo); insert into PERSON (ID, NAME) values (3, Ms. Bar);sql 目录中存放脚本文件脚本名称命名方式版本化迁移执行一遍版本号唯一有重复会报错 格式V版本号 双下划线描述结束符重复的迁移不需要版本号脚本发生变化启动就会执行格式R双下划线描述结束符撤消迁移格式U版本号 双下划线描述结束符4.运行启动主类运行日志如下从日志中可以看到如下信息启动后正确链接到数据库runoob验证2个迁移脚本成功使用命令行的方式创建了一张名称为flyway_schema_history的记录表这里要注意所有脚本一旦执行了就会在flyway_schema_history中创建记录 如果出错引发问题可以删除表中记录反正启动的时候还会再执行当然生产环境不建议此方法但生产环境上部署的包都是验证过无问题的包也不会出现此问题执行了resource/db.migration目录下的两个脚本并执行成功INFO 190688 --- [ main] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 7.15.0 by Redgate INFO 190688 --- [ main] o.f.c.i.database.base.BaseDatabaseType : Database: jdbc:mysql://127.0.0.1:3306/runoob (MySQL 5.7) INFO 190688 --- [ main] o.f.core.internal.command.DbValidate : Successfully validated 2 migrations (execution time 00:00.016s) INFO 190688 --- [ main] o.f.c.i.s.JdbcTableSchemaHistory : Creating Schema History table runoob.flyway_schema_history with baseline ... INFO 190688 --- [ main] o.f.core.internal.command.DbBaseline : Successfully baselined schema with version: 1 INFO 190688 --- [ main] o.f.core.internal.command.DbMigrate : Current version of schema runoob: 1 INFO 190688 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema runoob to version 1.20190621.1854 - CREATE PERSION TABLE INFO 190688 --- [ main] o.f.core.internal.command.DbMigrate : Migrating schema runoob to version 1.20190621.1904 - INIT PERSION INFO 190688 --- [ main] o.f.core.internal.command.DbMigrate : Successfully applied 2 migrations to schema runoob, now at version v1.20190621.1904 (execution time 00:00.225s)停止服务后重新运行日志如下从日志中可以看到信息启动后正确链接到数据库runoob验证2个迁移脚本成功本次没有重复执行脚本 日志中打印当前脚本编号20190621.1904 即最后1次执行的脚本INFO 193184 --- [ main] o.f.c.internal.license.VersionPrinter : Flyway Community Edition 7.15.0 by Redgate INFO 193184 --- [ main] o.f.c.i.database.base.BaseDatabaseType : Database: jdbc:mysql://127.0.0.1:3306/runoob (MySQL 5.7) INFO 193184 --- [ main] o.f.core.internal.command.DbValidate : Successfully validated 3 migrations (execution time 00:00.024s) INFO 193184 --- [ main] o.f.core.internal.command.DbMigrate : Current version of schema runoob: 1.20190621.1904 INFO 193184 --- [ main] o.f.core.internal.command.DbMigrate : Schema runoob is up to date. No migration necessary.查看Mysql数据库2.2 常见问题1.Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s)Caused by: org.flywaydb.core.api.FlywayException: Found non-empty schema(s) runoob but no schema history table. Use baseline() or set baselineOnMigrate to true to initialize the schema history table. at org.flywaydb.core.Flyway$1.execute(Flyway.java:200) ~[flyway-core-7.15.0.jar:na] at org.flywaydb.core.Flyway$1.execute(Flyway.java:170) ~[flyway-core-7.15.0.jar:na] at org.flywaydb.core.Flyway.execute(Flyway.java:586) ~[flyway-core-7.15.0.jar:na]问题原因第一执行的时候没有找到schema history table这张表其实就是application.properties文件中spring.flyway.table属性配置的表因此要么使用命令创建一个或者在application.properties文件中设置spring.flyway.baseline-on-migratetrue2.Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 5.7Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 5.7 at org.flywaydb.core.internal.database.DatabaseTypeRegister.getDatabaseTypeForConnection(DatabaseTypeRegister.java:106) ~[flyway-core-8.4.2.jar:na] at org.flywaydb.core.internal.jdbc.JdbcConnectionFactory.init(JdbcConnectionFactory.java:75) ~[flyway-core-8.4.2.jar:na] at org.flywaydb.core.FlywayExecutor.execute(FlywayExecutor.java:143) ~[flyway-core-8.4.2.jar:na] at org.flywaydb.core.Flyway.migrate(Flyway.java:124) ~[flyway-core-8.4.2.jar:na]问题原因flyway-core对数据库版本有要求例如flyway-core的当前最高版本V8.4.3不能使用 MySQL 5.7 当flyway-core降低到V7.15.0后 问题解决所以匹配flyway-core和数据库版本后问题即可解决2.3 源码参考https://github.com/PNZBEIJINGL/springboot总结本文介绍了Springboot集成flyway方式使用Flyway之前部署脚本方式一般为开发人员按照顺序汇总数据库的升级脚 然后DBA或者售后在生产库中按照顺序执行升级脚本。使用Flyway之后部署脚本方式就变更为开发人员将脚本构建到程序包中 部署程序包后启动时Flyway自动执行脚本升级