And*_*ete 5 flyway spring-boot
升级到Spring Boot 2from 时1.5,虽然 SQL 脚本没有改变,但出现以下错误:
Migration checksum mismatch for migration version 1
-> Applied to database : 1395032327
-> Resolved locally : -175919814
Run Code Online (Sandbox Code Playgroud)
Spring Boot推荐
为确保架构升级顺利进行,请按照以下说明进行操作:
首先将您的 1.5.x Spring Boot 应用程序升级到 Flyway 4(撰写本文时为 4.2.0),请参阅 Maven 和 Gradle 的说明。
一旦您的架构升级到 Flyway 4,升级到 Spring Boot 2 并再次运行迁移以将您的应用程序移植到 Flyway 5。
如果您不控制部署并且您不能两次部署应用程序(例如,用户下载应用程序的最新版本),这将是不可能的。
问题的原因是什么,解决方案是什么?
不同版本之间的校验和算法似乎有所不同。在(某些)版本中Flyway 4,
所有校验和都会在第一次运行时使用新算法自动重新计算和更新(Flyway #253)
我不确定这是否意味着校验和是用两个版本计算的,如果匹配旧版本则用新版本更新,或者是否意味着它被新版本盲目覆盖。
Flyway校验和算法:
版本 3 - 字节上的 crc32:
bytes = resource.loadAsBytes()
...
crc32.update(bytes);
Run Code Online (Sandbox Code Playgroud)版本 5(不是逐字复制) - crc32 过行(忽略 CR/LF,并使用 UTF-8 编码):
BufferedReader bufferedReader = new BufferedReader(new StringReader(resource.loadAsString(configuration.getEncoding())));
[...]
while ((line = bufferedReader.readLine()) != null) {
crc32.update(line.getBytes("UTF-8"));
}
Run Code Online (Sandbox Code Playgroud)解决方案
在使用 Spring Boot 修复 Flyway的答案中,提出了多种解决方案。
由于必须避免手动干预,因此我在启动时使用FlywayMigrationStrategy和 ajdbcTemplate将校验和从固定已知值更新为 Flyway 5 所需的新固定已知值。
| 归档时间: |
|
| 查看次数: |
4936 次 |
| 最近记录: |