我正在尝试将Liquibase与Spring/Hibernate Web应用程序集成以取代我们现有的本地解决方案。到目前为止,Liquibase非常棒,但有一个对我们很重要的用例,我不知道Liquibase是否支持它,这就是:在不同版本的多个数据库上运行liquibase
我们将web应用程序部署到托管webapp的客户端,数据库(MySQL)本身。因此,假设我们使用新的干净数据库模式(由Hibernate映射生成)和Liquibase变更集中没有项目部署到我们的第一个客户端(client1)。然后,我们开发一些模式更改并将应用程序重新部署到client1,并且liquibase完成它的工作并应用更改集 - 这一切都很棒。
现在,我们再次使用从Hibernate映射生成的新数据库模式部署到新客户端client2。但是这一次出现了变更集(针对客户端1和客户端2部署之间的更改),但不需要应用它们,因为它们已经在新模式中)。但是,由于DATABASECHANGELOG表为空,因此Liquibase会尝试应用更改集,并可能因SQL错误而失败。 我们希望新部署到新客户端的'知道'他们是什么变化(相对于第一次部署到客户端1),所以它只适用于后续更新。
似乎有对这个几种可能性,大概我没有想到的:
假冒项填入DATABASECHANGELOG愚弄Liquibase以为这些都已经得到了应用。
始终将我们的第一个基准原始模式部署到后续客户端,并按顺序运行更新,因此不要在client1之后部署从Hibernate映射派生的“新”模式。
使用我们自己的跟踪系统(例如,将db版本映射到应用程序版本,将db版本映射到变更集)。
这是一个问题,或者我只是不理解如何正确使用Liquibase?对于以前处理过这种用例的人的任何建议,我们将不胜感激。如果可能的话,我们真的想避免部署特定的changeSets - 即使不是数百个部署,也要处理数十个部署。
感谢, 理查德
感谢您的建议 - 我们已经建立了第二个开发数据库,我们可以使用它与hibernate生成的表进行比较,并在提交之前测试liquibase更新,然后我们将看到这是如何工作的。 。 – otter606