【问题标题】:Multiple apps with liquibase connected to one database具有连接到一个数据库的 liquibase 的多个应用程序
【发布时间】:2020-04-13 16:47:13
【问题描述】:

我们有多个连接到一个数据库的 Spring Boot 应用程序(微服务)。每个应用程序都有自定义的 db schema,例如 App A 连接到 schema_a,App B 连接到 schema_b,等等。

这些连接到该数据库的应用程序大约有 15 个(不同的应用程序),其中大约一半启动了。后半部分由于 liquibase 尝试运行脚本而卡住,但由于表 databasechangeloglock 中的记录已锁定设置true,它正在等待。我不明白为什么有些应用启动良好而有些却卡住了。

这是我在每个应用程序中的数据源和 liquibase 配置:

spring.liquibase.default-schema=schema_of_app
spring.liquibase.enabled=true
spring.liquibase.change-log=classpath:xxx/changelog.xml

spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.auto-commit=false
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.max-lifetime=60000
spring.datasource.hikari.minimum-idle=0
spring.datasource.hikari.leak-detection-threshold=20000
spring.datasource.url=jdbc:postgresql://localhost:5432/app_db?currentSchema=${spring.liquibase.default-schema}
spring.datasource.username=user
spring.datasource.password=pass

您知道我做错了什么以及如何解决我的问题吗?谢谢你的建议。

【问题讨论】:

  • 同一个应用程序的 15 个实例?还是 15 个不同的应用程序?如果有 15 个异构应用程序连接到单个数据库,您就是在自找麻烦
  • @so-random-dude 感谢您的努力,有 15 个不同的应用程序,每个应用程序都有自定义架构
  • 您可能在 liquibase 迁移期间停止了之前突然锁定的应用程序,从而将锁定留在了数据库中。移除锁,然后重新启动它们。
  • @JBNizet 不,我只是用我所有的应用程序运行 compose 文件,没有任何容器、卷或任何东西
  • 如果只有应用程序连接到数据库模式而不是您启动的应用程序,并且之前没有设置锁,我看不出如何设置锁。你确定它除了等待解锁之外什么都不做吗?不就是简单地应用一个长的 liquibase 迁移吗?

标签: spring postgresql spring-boot liquibase


【解决方案1】:

可能发生的情况是,虽然每个应用只更新自己的架构,但 Liquibase DATABASECHANGELOG 和 DATABASECHANGELOGLOCK 表是共享的。这些表很可能在 PostgreSQL 的 public 模式中。与其将它们保留在公共模式中,不如考虑将这两个表中的每一个与它们正在跟踪的模式分别保存。您可以通过在您的配置中设置spring.liquibase.liquibaseSchemaName 属性来做到这一点。

听起来这些表已经存在于您的数据库中,因此您可能需要执行一些额外的步骤才能将它们放在正确的位置并正确填充,然后再进行一些清理。这可以通过 Liquibase 本身完成,但手动操作可能更容易(取决于所涉及的数据库数量以及您是否设置为“手动”而不是在应用程序启动时运行 liquibase)。

【讨论】:

  • 谢谢,我会试试的。但是我的 liquibases 表位于我在连接字符串和属性 default-schema 中定义的特定模式中,因此公共模式中没有:/
  • 我会仔细检查您希望它们所在的架构中是否有 DATABASECHANGELOG 和 DATABASECHANGELOGLOCK 表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 2019-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多