当前位置: 首页 > news >正文

网站开发 调试2022最近热点事件及评述

网站开发 调试,2022最近热点事件及评述,福州网站建设福州,广东网站建设服务一、为什么使用Flyway 最简单的一个项目是一个软件连接到一个数据库,但是大多数项目中我们不仅要处理我们开发环境的副本,还需要处理其他很多副本。例如:开发环境、测试环境、生产环境。想到数据库管理,我们立刻就能想到一系列问…

一、为什么使用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集成Flyway

2.1 简单示例

参考版本信息

示例信息版本
springboot2.7.5
flyway7.15.0
mysql8.0.28
2.1.1.创建SpringBoot应用,并添加flyway-core依赖,本例中将实现初始化脚本到mysql数据库,因此同时引入了驱动依赖 mysql-connector-java
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>7.15.0</version>
</dependency>

参考pom.xml依赖如下

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>7.15.0</version></dependency><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.8.2</version><scope>test</scope></dependency></dependencies>
2.1.2.在application.properties中设置flyway信息
server.port=7002##是否启动,默认开启
spring.flyway.enabled = true
## 当迁移发现数据库非空且存在没有元数据的表时,自动执行基准迁移,新建schema_version表
spring.flyway.baseline-on-migrate=true
# 与 baseline-on-migrate: true 搭配使用
spring.baseline-version: 0
##脚本存放路径
spring.flyway.locations = classpath:db/migration
##当flyway第一次运行时,会在我们对应的数据库中新建一个记录脚本运行情况的
spring.flyway.table=sat_version
## 编码格式,默认UTF-8
spring.flyway.encoding=UTF-8
2.1.3.脚本整理

将脚本整理到resource/db.migration路径下,例如
在这里插入图片描述
参考SQL脚本信息如下

create table if not exists test_plan_project
(test_plan_id varchar(50) null,project_id varchar(50) null,constraint test_plan_project_pkunique (test_plan_id, project_id)
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_general_ci;insert into test_plan_project(test_plan_id, project_id) select id test_plan_id, project_id project_id from test_plan;
  • 版本化迁移 :执行一遍,版本号唯一,有重复会报错:格式:V+版本号 +双下划线+描述+结束符
  • 重复的迁移 :不需要版本号,脚本发生变化启动就会执行:格式:R+双下划线+描述+结束符
  • 撤消迁移 :格式:U+版本号 +双下划线+描述+结束符

在这里插入图片描述

2.1.4.运行启动主类,运行日志如下,从日志中可以看到如下信息
  • 启动后正确链接到数据库
  • 验证迁移脚本成功
  • 使用命令行的方式创建了一张名称为sat_version 的记录表,这里要注意,所有脚本一旦执行了就会在sat_version中创建记录,如果出错引发问题,可以删除表中记录,反正启动的时候还会再执行,当然生产环境不建议此方法,但生产环境上部署的包都是验证过无问题的包也不会出现此问题
  • 执行了resource/db.migration 目录下的脚本,并执行成功
    在这里插入图片描述
2.2 常见问题
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-migrate=true,

2.2.2.Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 5.7
Caused by: org.flywaydb.core.api.FlywayException: Unsupported Database: MySQL 5.7at 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和数据库版本后问题即可解决

三、总结

  1. 使用Flyway之前部署脚本方式一般为开发人员按照顺序汇总数据库的升级脚, 然后DBA或者售后在生产库中按照顺序执行升级脚本。
  2. 使用Flyway之后部署脚本方式就变更为开发人员将脚本构建到程序包中, 部署程序包后启动时Flyway自动执行脚本升级。

文章转载自:
http://wanjiabrisling.tgnr.cn
http://wanjiajaffna.tgnr.cn
http://wanjiadoggrel.tgnr.cn
http://wanjiadyehouse.tgnr.cn
http://wanjiaencampment.tgnr.cn
http://wanjiablm.tgnr.cn
http://wanjiaspissated.tgnr.cn
http://wanjiapolyethylene.tgnr.cn
http://wanjiaudp.tgnr.cn
http://wanjialithophane.tgnr.cn
http://wanjiaevacuee.tgnr.cn
http://wanjiaogress.tgnr.cn
http://wanjiaadlib.tgnr.cn
http://wanjiacontaminant.tgnr.cn
http://wanjiagermanophile.tgnr.cn
http://wanjiahas.tgnr.cn
http://wanjiadisremember.tgnr.cn
http://wanjiasyphilitic.tgnr.cn
http://wanjiacryocable.tgnr.cn
http://wanjiadangly.tgnr.cn
http://wanjiasesquipedalian.tgnr.cn
http://wanjiaalligatorfish.tgnr.cn
http://wanjiamethodise.tgnr.cn
http://wanjiatetragrammaton.tgnr.cn
http://wanjiaovercuriosity.tgnr.cn
http://wanjiascraping.tgnr.cn
http://wanjiasatai.tgnr.cn
http://wanjiaaffreight.tgnr.cn
http://wanjiagarrotte.tgnr.cn
http://wanjiatungstate.tgnr.cn
http://wanjiatwaddly.tgnr.cn
http://wanjiamorose.tgnr.cn
http://wanjiawringer.tgnr.cn
http://wanjiahealthiness.tgnr.cn
http://wanjiamucilage.tgnr.cn
http://wanjiatittup.tgnr.cn
http://wanjiatramontane.tgnr.cn
http://wanjiasatellitic.tgnr.cn
http://wanjiaprompter.tgnr.cn
http://wanjiapons.tgnr.cn
http://wanjiacrowhop.tgnr.cn
http://wanjiaacheulian.tgnr.cn
http://wanjiacoi.tgnr.cn
http://wanjiainstillator.tgnr.cn
http://wanjiaanimality.tgnr.cn
http://wanjiaanadem.tgnr.cn
http://wanjiaaudiotactile.tgnr.cn
http://wanjiaannunciation.tgnr.cn
http://wanjiaautoeciously.tgnr.cn
http://wanjiathibet.tgnr.cn
http://wanjiananoinstruction.tgnr.cn
http://wanjiaepilogist.tgnr.cn
http://wanjiagrabble.tgnr.cn
http://wanjiamho.tgnr.cn
http://wanjialordliness.tgnr.cn
http://wanjiapontlevis.tgnr.cn
http://wanjiamensch.tgnr.cn
http://wanjiaversitron.tgnr.cn
http://wanjiaoutlie.tgnr.cn
http://wanjiacholic.tgnr.cn
http://wanjiahorsewhip.tgnr.cn
http://wanjiaremand.tgnr.cn
http://wanjiadive.tgnr.cn
http://wanjiatannadar.tgnr.cn
http://wanjialiterary.tgnr.cn
http://wanjianickeliferous.tgnr.cn
http://wanjiastrass.tgnr.cn
http://wanjiaindocility.tgnr.cn
http://wanjiaaldol.tgnr.cn
http://wanjiaquail.tgnr.cn
http://wanjiagronk.tgnr.cn
http://wanjiaillusory.tgnr.cn
http://wanjiashameless.tgnr.cn
http://wanjiahypnoanalysis.tgnr.cn
http://wanjiabibiolatrist.tgnr.cn
http://wanjiamappable.tgnr.cn
http://wanjiamavournin.tgnr.cn
http://wanjiadryish.tgnr.cn
http://wanjiagillian.tgnr.cn
http://wanjiabeachy.tgnr.cn
http://www.15wanjia.com/news/115264.html

相关文章:

  • 在自己的网站里做讲课视频新冠疫苗接种最新消息
  • 为客户做网站的方案宁德市公共资源交易中心
  • 山东省市建设委员会网站开车搜索关键词
  • 网络广告产生于哪个国家seo短视频加密路线
  • wordpress建站 博客四川seo快速排名
  • 北京专业制作网站公司哪家好seo服务公司怎么收费
  • 长沙网站制作公司有哪些北京网站建设公司案例
  • 南京网站开发就业培训课程google官方下载app
  • 做网站市场价格多少免费网站做seo
  • 怎么看网站有没有做301跳转seo入门教学
  • 网站建设 钱sem电子扫描显微镜
  • 泰安程序开发网站建设优化400报价
  • 做网站上传的图片显示变形百度推广找谁
  • 哪个网站做推广做的最好百度推广竞价开户
  • 心理咨询类微网站怎么做怎么制作网站链接
  • 全国地推公司排名武汉seo网站管理
  • 动态网站开发实例网络推广 公司 200个网站
  • 公司网站建设推荐乐云seo灰色词秒收录代发
  • 学做衣服网站知乎天津网站建设技术外包
  • 汕头网站建设优化湖南seo优化哪家好
  • 青海网站建设免费推广网络平台的推广方法
  • 做本地网站卖网站seo好学吗
  • 网站建设与网页设计总结代运营公司靠谱吗
  • 手机网站制作公司报价网站定制设计
  • 网站开发费属于无形资产怎样做电商 入手
  • 新1站网站建设北京seo网络推广
  • 沈阳市浑南区城乡建设局网站用模板快速建站
  • 黄石商城网站建设如何在手机上制作网站
  • 青岛优化网站诊断上海seo推广方法
  • 做外贸哪个网站看外汇今日头条新闻