Java中使用Flyway对已有数据的数据库表进行增加字段操作
在写 tgDrive 的时候,突然想起自己有可能是因为在返回的 header 里没有通过 Content-Length
设置文件的大小导致在下载文件的时候显示的是恢复文件,而不是下载文件。一开始自己为了图方便并没有直接存储文件的大小,所以需要在已有数据库表上新增 full_size
字段。而我又不能自己单独操作数据库,因为这个项目是需要自部署的,我也得考虑到其他在使用这个项目的人。所以我选择使用Flyway进行数据库迁移。
方法
1. 引入依赖
- Maven 方式:在
pom.xml
中添加 Flyway 的依赖。
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
- Gradle 方式:在
build.gradle
中添加 Flyway 的依赖。
dependencies {
implementation 'org.flywaydb:flyway-core'
}
2.新建迁移目录和 SQL 脚本
新建 src/main/resources/db/migration
文件夹(这是 Flyway 默认的迁移目录)。然后在该文件夹下创建一个 SQL 脚本,例如:V2__AddFullSizeColumn.sql
(遵循 Flyway 的命名规则):
ALTER TABLE files ADD COLUMN full_size INTEGER DEFAULT 0;
Flyway 的命名规则
Flyway 的迁移脚本文件名需要遵循特定的命名规则,以确保脚本的执行顺序正确。文件名格式如下:
V<版本号>__<描述>.sql
V
表示版本前缀,必须以大写字母V
开头。<版本号>
是版本的编号,例如1
,2
,2.1
等,用于标识迁移脚本的顺序。__
是两个下划线,用于分隔版本号和描述。<描述>
是对迁移内容的描述,使用下划线代替空格,例如AddFullSizeColumn
。
例如:
V1__Initial_setup.sql
V2__AddFullSizeColumn.sql
3. 配置 Flyway
在 Spring 项目中,可以选择通过 application.properties
或 application.yml
文件配置 Flyway。
- application.yml 方式:
spring.flyway.baseline-on-migrate=true
- application.properties 方式:
spring:
flyway:
baseline-on-migrate: true
4. 启动 Spring 项目
完成以上步骤后,启动 Spring 项目,Flyway 将自动执行迁移脚本,完成对数据库表的新增字段操作。
总结
通过使用 Flyway,我们可以方便地进行数据库版本控制和变更管理。我成功地为已有的数据库表 files
增加了一个新的字段 full_size
,从而解决了下载文件时未正确显示的问题。使用 Flyway 不仅让数据库迁移更为规范,还能在团队协作中保证数据库变更的一致性。