Spring 多个liquibase连接到一个数据库的应用程序

Spring 多个liquibase连接到一个数据库的应用程序,spring,postgresql,spring-boot,liquibase,Spring,Postgresql,Spring Boot,Liquibase,我们有多个spring引导应用程序(微服务),它们连接到一个数据库。每个应用程序都有自定义的db模式,例如,应用程序A连接到模式A,应用程序B连接到模式B,等等 这些连接到此数据库的应用程序大约有15个(不同的应用程序),其中只有大约一半已启动。下半部分由于liquibase正在尝试运行脚本而被卡住,但它正在等待,因为表databasechangeloglock中的记录已锁定settrue。我不明白为什么有些应用程序启动得很好,有些却卡住了 这是我在每个应用程序中的数据源和liquibase配置

我们有多个spring引导应用程序(微服务),它们连接到一个数据库。每个应用程序都有自定义的db模式,例如,应用程序A连接到模式A,应用程序B连接到模式B,等等

这些连接到此数据库的应用程序大约有15个(不同的应用程序),其中只有大约一半已启动。下半部分由于liquibase正在尝试运行脚本而被卡住,但它正在等待,因为表databasechangeloglock中的记录已锁定set
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

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

可能发生的情况是,虽然每个应用程序只更新自己的模式,但Liquibase DATABASECHANGELOG和DATABASECHANGELOGLOCK表是共享的。这些表很可能位于PostgreSQL的
public
模式中。与其将这些保持在公共模式中,不如考虑将这两个表中的每一个与它们正在跟踪的模式保持单独的副本。您可以通过在配置中设置
spring.liquibase.liquibaseSchemaName
属性来实现这一点


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

15个相同应用的实例?或者15个不同的应用程序?如果15个异构应用程序正在连接到单个应用程序,那么您就是在自找麻烦database@so-random dude感谢您的努力,共有15个不同的应用程序,每个应用程序都有自定义模式您可能会在liquibase迁移过程中停止之前突然锁定的应用程序,从而将锁留在数据库中。移除锁,然后重新启动。@jbnize不,我只是用我所有的应用程序运行compose file,没有任何容器、卷或任何东西。如果应用程序连接到数据库架构,而不是您启动的应用程序,并且之前没有设置锁,我不知道如何设置锁。您确定它除了等待解除锁定之外什么都不做吗?这不是简单地应用长时间的液化迁移吗?谢谢,我会尝试的。但是我的liquibases的表是在特定的模式中分配的,我在连接字符串和属性默认模式中定义了该模式,因此在公共模式中没有:/我会仔细检查您是否在您想要的模式中有DATABASECHANGELOG和DATABASECHANGELOGLOCK表。