繁体   English   中英

数据库迁移(Liquibase + Maven + Spring)

[英]DB migrations (Liquibase + Maven + Spring)

我来自一个.Net背景,我正在使用MavenSpringLiquibase的Java项目。 不用说,这是一个新的概念和框架来处理。

测试无法完成:

我的测试不会成功完成,因为它们在尝试访问数据库中的表时失败。 它们失败是因为该表不存在。 我看到我的项目中有许多Liquibase XML格式的迁移文件,但我正在研究如何运行它们。

liquibase-maven-plugin不是一个选项:

我看到其他人可能会使用liquibase-maven-plugin插件,但在我的情况下,该项目没有在任何pom.xml中引用该插件,只有liquibase-core 有一些其他的开发人员知道他们过去在这个项目上做了什么,因为他们从未在pom.xml文件中引用过这个插件,我认为这是有充分理由的,我不会搅拌那个底池。

SpringLiquibase

他们引用了一个看起来像这样的<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase"><bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase"> ,经过进一步研究后似乎进行了自动数据迁移,

大!

....但我该如何调用呢? 我的项目是否必须通过我的测试,并且在此逻辑被击中之前实际上是“运行”? 如果是这种情况并且我的项目必须成功构建/测试,那么我显然必须在SpringLiquibase bean之外运行我的迁移。

我是否应该使用liquibase命令行,如果是这样,我可以安全地假设这是以前的开发人员为最初建立他们的数据库所做的事情吗?

你是对的,SpringLiquibase设置应该自动进行数据库更新,但它只会在spring框架启动时执行。

我的猜测是你的正常应用程序启动通过Spring触发Liquibase,但测试框架没有。 也许他们没有注意到它,因为他们倾向于在liquibase changelog文件中更改数据库,然后启动正常的应用程序进行初始测试(更新数据库),然后构建并运行测试。 现在您首先运行测试,数据库尚未存在。

您是否能够判断您的测试是否正在尝试启动Spring?

即使在应用程序使用SpringLiquibase的情况下,我通常也建议使用liquibase-maven-plugin,ant插件或命令行来配置项目以允许手动更新,因为它往往会提高处理效率。 通过该设置,您可以添加更改集,然后运行liquibase更新,而无需通过整个应用程序启动甚至运行测试。 您可以将其设置为在测试执行时自动运行,但更新过程通常很少,以至于最好避免每次测试执行时的liquibase更新开销。 在您的应用程序的弹簧设置中包含它仍然非常有用,这样在QA和生产中您不必记住手动更新数据库,它只是自动保持最新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM