【发布时间】: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