feat:新增JsonView博客
This commit is contained in:
57
docs/Web-Backend/Others/Flyway.md
Normal file
57
docs/Web-Backend/Others/Flyway.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# 一、简介
|
||||
  Flyway 是一个开源的数据库版本控制工具,它极大地简化了数据库的迁移和版本管理。它的核心思想是像**用 Git 管理代码一样来管理数据库的结构**。
|
||||
|
||||
# 二、原理
|
||||
  Flyway 通过在数据库中创建一个名为 flyway_schema_history的特殊表来工作
|
||||
| 列名 | 含义 |
|
||||
| - | - |
|
||||
| installed_rank | 执行顺序 |
|
||||
| version | 脚本的版本号 |
|
||||
| description | 脚本的描述 |
|
||||
| type | 脚本类型(通常是 SQL) |
|
||||
| script | 脚本文件名 |
|
||||
| checksum | 脚本文件的校验和(用于检测篡改) |
|
||||
| installed_by | 执行人 |
|
||||
| installed_on | 执行时间 |
|
||||
| execution_time | 执行耗时(毫秒) |
|
||||
| success | 是否成功 |
|
||||
|
||||
  工作流程:
|
||||
1. 应用启动时,Flyway 会检查配置的数据库路径。
|
||||
2. 检查目标数据库中的 flyway_schema_history表。
|
||||
3. 将数据库路径下的迁移脚本与 flyway_schema_history表中的记录进行对比。
|
||||
4. 按照版本号顺序执行那些尚未执行的迁移脚本。
|
||||
5. 执行成功后,将记录插入 flyway_schema_history表。
|
||||
|
||||
## 2.1 校验和计算
|
||||
  Flyway 使用 CRC32 算法 计算 SQL 脚本文件的校验和(Checksum)。Javs使用32位有符号整数存储,因此有时会得到负数。可以通过`mvn flyway:info`查看每个脚本的校验和。
|
||||
|
||||
# 三、与SpringBoot集成
|
||||
## 3.1 添加依赖
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>org.flywaydb</groupId>
|
||||
<artifactId>flyway-core</artifactId>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## 3.2 配置数据源
|
||||
```yml
|
||||
spring:
|
||||
flyway:
|
||||
enabled: true
|
||||
locations: classpath:db/migration
|
||||
baseline-on-migrate: true # 如果数据库非空,且无 flyway_schema_history 表,则先创建基线版本
|
||||
```
|
||||
  `baseline-on-migrate: true`,当数据库已经存在数据,但是没有flyway_schema_history表时,Flyway会插入一条基线数据,并标记为1.0版本,则后续的迁移脚本只会执行比1.0版本更高的数据库文件。
|
||||
  **如果设置为false,如果数据库已经存在数据时,Flyway会报错。**
|
||||
  因此需要避免这种情况的存在,在**初始发布应用时,要保证数据库为空**。
|
||||
|
||||
## 3.3 创建数据库脚本
|
||||
  在项目的资源目录 src/main/resources下创建文件夹 db/migration。
|
||||
  Flyway 的 SQL 脚本文件名有严格的命名规则:`V<Version>__<Description>.sql`
|
||||
  例如V1.0.0_001__20251027.sql,表示v1.0.0版本的第一个sql,日期为2025年10月27日。
|
||||
  **创建了迁移脚本,一旦应用,就不可修改,否则会导致校验错误。如果确实要修改,请再创建一个脚本。**
|
||||
|
||||
## 3.4 启动程序
|
||||
  启动程序后。Flyway会自动在数据库中创建flyway_schema_history表,然后扫描db/migration目录下的所有脚本,按顺序执行sql文件,并记录到flyway_schema_history表中。
|
||||
Reference in New Issue
Block a user