将 java 网络应用程序设置为 运行 每个 SQL 脚本仅一次

Setup java web application to run each SQL script only once

问题

我和我的大学朋友一起制作 Web 应用程序,我们最近遇到了以下问题。服务器与远程存储库同步 (git)。每个人都可以 运行 在本地应用程序,并在他的本地机器上拥有自己的本地数据库。 Web 托管上的数据库已插入服务器上的应用程序。当有人想要更改数据库中的某些内容时,他会编写一个 sql 脚本将其推送到存储库 运行 ,然后 运行 在服务器上并确保每个开发人员也执行它。这对我们来说似乎很不舒服。

坏主意

解决方案是让每个人都连接到同一个数据库。但恕我直言,这是个坏主意,因为:

好主意

前段时间在公司工作,问题解决如下。有一个 Maven 插件配置为 运行 每个 sql 指定目录中的脚本在应用程序构建期间仅执行一次(mvn clean install),即它会记住哪个脚本已经执行并保留它。例如,假设有人想要更改数据库新列中的某些内容。然后他编写脚本将其推送到存储库,然后他什么都不用担心,因为脚本会在应用程序构建期间自动为他、服务器和所有其他开发人员执行。

怎么做

很遗憾,我找不到该插件或配置。老实说,我在网上找不到任何与我的问题相关的信息,这令人惊讶,因为这对我来说似乎是一个常见问题。那么我可以通过一些 Maven 插件来完成吗?也许有办法通过适当的 Spring 配置来做到这一点。如果我被迫手动执行(在应用程序启动时在 Java 中),我需要什么工具、任何建议、class 模式?

期待您的帮助。也很抱歉我的英语不是母语。

只是猜测,但也许您工作的公司使用了 liquibase 或 flyway。 对于也可以通过 Maven 使用的 liquibase,可以在此处找到信息:http://www.liquibase.org/, specifically for the maven integratation here: http://www.liquibase.org/documentation/maven/index.html

Spring 也带有 liquibase 集成,可以在这里找到信息:http://www.liquibase.org/documentation/spring.html or in addition, if you're using spring boot: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-database-initialization.html

另一种可能的数据库迁移解决方案是 flyway:您的文档入口点:http://flywaydb.org/