强调
永远不要使用框架去自动维护数据库,不止是危险,更重要是他们做的都很垃圾。
解决方案
我们使用一个叫做 Flyway 的库去解决线上,线下及其他不同环境下的数据库迁移问题。
同时这个解决方案也是 Spring 官方推荐的解决方案,可以当作数据库迁移问题的最佳实践来使用了,点击这里查看官方说明。
步骤
第一步:禁用框架自动维护
比如 JPA 的:
spring.jpa.hibernate.ddl-auto=none
第二步:添加依赖
<!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>6.1.1</version>
</dependency>
第三步:配置 Flyway
# 启用 Flyway
spring.flyway.enabled=true
# 配置 Migration 文件的位置
spring.flyway.locations=classpath:db/migration
# 当数据库不为空时,需要设置此项为 True ,Flyway 会自动添加一条 baseline-version 配置的记录
spring.flyway.baseline-on-migrate=true
spring.flyway.baseline-version=1
# 禁用清空功能
spring.flyway.clean-disabled=true
第四步:添加 Migration 文件
Flyway 使用的就是普通的 SQL 文件,与平时的 SQL 操作命令完全一致,无需担心额外的学习成本,这里需要学习的就是 Flyway 文件的命名方式。
可参考官方文档中关于命名方式的解释,这里是不同前缀含义的解释。