Java 如何在构建构件中包含数据库迁移脚本

Java 如何在构建构件中包含数据库迁移脚本,java,migration,liquibase,flyway,Java,Migration,Liquibase,Flyway,根据Martin Fowler的这篇优秀文章: 一旦构建成功完成,CI服务器将打包构建工件并发布它们。这些构建构件包含数据库迁移脚本,因此它们可以应用于下游环境中的数据库(…) 我的问题是如何在基于Java的工作流的实践中实现这一点?构建工件通常是.war、.jar或.ear文件,并发布到Nexus、Archiva或Artfactory服务器。迁移脚本是否可以包含在这些工件中,以便在不修改目标环境的情况下执行迁移?像Flyway或Liquibase这样的工具可以用于此目的吗?是!我们(Flywa

根据Martin Fowler的这篇优秀文章:

一旦构建成功完成,CI服务器将打包构建工件并发布它们。这些构建构件包含数据库迁移脚本,因此它们可以应用于下游环境中的数据库(…)


我的问题是如何在基于Java的工作流的实践中实现这一点?构建工件通常是.war、.jar或.ear文件,并发布到Nexus、Archiva或Artfactory服务器。迁移脚本是否可以包含在这些工件中,以便在不修改目标环境的情况下执行迁移?像Flyway或Liquibase这样的工具可以用于此目的吗?

是!我们(Flyway)强烈建议将迁移打包到应用程序中,并在启动时运行它们。通过这种方式,您可以确保数据库始终包含应用程序当前版本所需的对象(表、视图、存储过程等)。

我们使用maven构建人工制品,并且在src/main/resources/db/migration文件夹下有flyway迁移脚本

应用程序是一个SpringWeb应用程序,在SpringContainer启动期间,它运行Flyway迁移。如果出现问题,应用程序将永远不会启动

这样,我们可以确保数据库状态是应用程序启动时所需的状态