【问题标题】:How to include database migration scripts in build artifacts如何在构建工件中包含数据库迁移脚本
【发布时间】:2017-12-01 08:47:41
【问题描述】:
根据 Martin Fowler 的出色 article:
构建成功完成后,CI 服务器会打包构建工件并发布它们。这些构建工件包含数据库迁移脚本,因此它们可以应用于下游环境中的数据库(...)
我的问题是如何在基于 Java 的工作流的实践中实现这一点?构建工件通常是 .war、.jar 或 .ear 文件,并发布到 Nexus、Archiva 或 Artifactory 服务器。迁移脚本是否可以包含在这些工件中,以便在不修改目标环境的情况下执行迁移? Flyway 或 Liquibase 等工具可以用于此目的吗?
【问题讨论】:
标签:
java
migration
liquibase
flyway
【解决方案1】:
是的!我们(Flyway)强烈建议将您的迁移与您的应用程序打包并在启动时运行它们。这样可以确保您的数据库始终包含当前版本的应用程序所需的对象(表、视图、存储过程...)。
【解决方案2】:
我们使用 maven 构建工件,并且在 src/main/resources/db/migration 文件夹下有 flyway 迁移脚本。
App 是一个 Spring Web 应用,在 Spring 容器启动期间,它运行 Flyway migrate。如果出现问题,应用程序永远不会启动。
这样我们可以确保数据库状态是应用启动时所需要的。