强调

永远不要使用框架去自动维护数据库,不止是危险,更重要是他们做的都很垃圾。

解决方案

我们使用一个叫做 Flyway 的库去解决线上,线下及其他不同环境下的数据库迁移问题。
同时这个解决方案也是 Spring 官方推荐的解决方案,可以当作数据库迁移问题的最佳实践来使用了,点击这里查看官方说明

步骤

第一步:禁用框架自动维护

比如 JPA 的:

  1. spring.jpa.hibernate.ddl-auto=none

第二步:添加依赖

  1. <!-- https://mvnrepository.com/artifact/org.flywaydb/flyway-core -->
  2. <dependency>
  3. <groupId>org.flywaydb</groupId>
  4. <artifactId>flyway-core</artifactId>
  5. <version>6.1.1</version>
  6. </dependency>

第三步:配置 Flyway

  1. # 启用 Flyway
  2. spring.flyway.enabled=true
  3. # 配置 Migration 文件的位置
  4. spring.flyway.locations=classpath:db/migration
  5. # 当数据库不为空时,需要设置此项为 True ,Flyway 会自动添加一条 baseline-version 配置的记录
  6. spring.flyway.baseline-on-migrate=true
  7. spring.flyway.baseline-version=1
  8. # 禁用清空功能
  9. spring.flyway.clean-disabled=true

第四步:添加 Migration 文件

Flyway 使用的就是普通的 SQL 文件,与平时的 SQL 操作命令完全一致,无需担心额外的学习成本,这里需要学习的就是 Flyway 文件的命名方式。
WX20191213-162621@2x.png
可参考官方文档中关于命名方式的解释,这里是不同前缀含义的解释