我有 .Net 背景,正在使用 Maven、Spring 和 Liquibase 开发 Java 项目。不用说,这是要处理的一系列新概念和框架。
测试不会完成:
我的测试无法成功完成,因为它们在尝试访问我的数据库中的表时失败了。它们失败是因为该表不存在。我发现我的项目中有许多 Liquibase XML 格式的迁移文件,但我正在研究如何运行它们。
liquibase-maven-plugin
不是一个选项:
我看到其他人可能会使用 liquibase-maven-plugin
插件,但在我的例子中,该项目没有在任何 pom.xml 中引用该插件,只有 liquibase-core
.鉴于他们从未在 pom.xml 文件中引用此插件,过去有一些其他开发人员知道他们在做什么,他们过去在这个项目上工作过,我认为这是有充分理由的,我不会搅动那个锅.
SpringLiquibase
?
他们引用了一个如下所示的 bean:<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
,经过进一步研究似乎可以进行自动数据迁移,
太棒了!
....但是我该如何去调用它呢?我的项目必须已经通过我的测试并且在这个逻辑被击中之前实际上已经“运行”了吗?如果是这种情况并且我的项目必须成功构建/测试,那么我显然必须在此 SpringLiquibase
之外运行我的迁移 bean 。
我应该使用 liquibase
吗?命令行,如果是这样,我可以安全地假设这是以前的开发人员最初建立数据库时所做的吗?
最佳答案
你说得对,SpringLiquibase 设置应该自动更新数据库,但它只会在 spring 框架启动时执行。
我的猜测是您的正常应用程序启动会通过 Spring 触发 Liquibase,但测试框架不会。也许他们没有注意到它,因为他们倾向于在 liquibase 变更日志文件中更改数据库,然后启动正常应用程序进行初始测试(更新数据库),然后构建并运行测试。现在您要先运行测试,数据库还不存在。
您能判断您的测试是否正在尝试启动 Spring 吗?
即使在应用程序使用 SpringLiquibase 的情况下,我通常也建议将您的项目配置为允许使用 liquibase-maven-plugin、ant 插件或命令行进行手动更新,因为这样可以提高流程效率。使用该设置,您可以添加变更集,然后运行 liquibase 更新,而无需经历整个应用程序启动甚至运行测试。您可以将其设置为在测试执行时自动运行,但更新过程通常很少见,因此最好避免每次测试执行时的 liquibase 更新开销。将其包含在应用程序的 spring 设置中仍然非常有帮助,这样在 QA 和生产中您就不必记住手动更新数据库,它会自动保持最新。
关于java - 数据库迁移(Liquibase + Maven + Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22415552/