【发布时间】:2018-09-07 00:43:35
【问题描述】:
在 Spring Boot 中,the documentation 似乎鼓励在应用启动时运行迁移。
这很好,但有时应用程序启动可能会产生我不想打扰的副作用/依赖项 - 我只想自己运行迁移。想想只是设置一个本地开发数据库,在其中四处寻找,甚至无需运行应用程序。
相比之下,在 Dropwizard 中,单独运行迁移 is straightforward 并带有应用的内置参数,就像这样
java -jar hello-world.jar db migrate helloworld.yml
Spring Boot 有什么等价物吗?还是我只需要直接下拉并运行 liquibase?
我有兴趣直接回答,但也有兴趣看看我是否误解了更高层次的东西 - 比如也许这种在启动时运行的方法通常“更好”,因为某些原因我没有尚未发现,因此 Spring Boot 鼓励您完全采用这种方式作为设计选择。
【问题讨论】:
-
您是否尝试过运行特定的 liquibase maven 目标
liquibase:update? liquibase.org/documentation/maven/maven_update.html -
可以通过配置禁用吗? :stackoverflow.com/questions/41491234/…
-
我们希望在部署容器之前在 CI/CD 管道中执行此操作。否则,如果 Liquibase 在应用程序启动时运行,它将与每个毫无意义的自动缩放事件一起运行。我认为您还没有找到解决方案?
-
@DarthPablo 不,从未找到解决方案。除非切换回 Dropwizard 很重要 ;-) 事实上,好点,就像您可能不希望在只想运行迁移时运行应用程序产生副作用一样,反之亦然。有趣的设计选择,从来没有找到任何令人信服的论据证明它是一种更好的方法或有其他我不知道的好处 - 我想这真的很明显,它很方便你永远不会在没有运行最新迁移的情况下意外启动应用程序,但我不确定轻微的专业可以弥补这里的缺点。
-
“否则,如果 Liquibase 在应用程序启动时运行,它将与每个毫无意义的自动缩放事件一起运行”@DarthPablo 当没有要应用的迁移时,Liquibase 只需半秒即可比较与您的迁移文件一起在数据库中应用的迁移列表 - 这对我们来说从来都不是问题。如果您同时启动应用程序的 2 个实例,它们不会相互干扰,因为 Liquibase 使用数据库锁来确保一次只有一个实例在处理迁移。
标签: java spring-boot liquibase