”“将生产转储导入Dev

问题描述 投票:0回答:0

将生产数据库转储导入我们的开发环境之后,我们的春季启动应用程序(两个共享同一PostgreSQL数据库)无法从错误开始:

拷贝 org.springframework.beans.factory.beancreationexception:错误创建bean用名称'liquibase'...
liquibase.exception.lockexception:预期的一排,但得到2
该问题仅在导入转储后才发生在开发环境中。在本地,两种服务一起开始时都可以正常工作。

键详细信息:

问题:databasechangelogloclogloglogl表有多个行(预期:ID = 1的1行)。

因素:可能是由于从生产转储中导入损坏的databasechangeloglogloglogloglogloglogloglogn。

我们尝试过的方法:

在databasechangelogloglogloglogloglogloglogloglogloglog上手动删除额外的行并重置表(临时工作)。 确认两个应用程序都使用相同的Liquibase ChangElog文件(请参见下面的配置)。

问题:将生产转储转储到开发时,如何防止此错误?

配置:

app-backend-1(databaseconfig.java):

java

@Bean public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) { // ... sets changelog to "classpath:config/liquibase/master.xml" }

app-backend-2(databaseconfiguration.java):

java

@Bean public SpringLiquibase liquibase(DataSource dataSource, LiquibaseProperties liquibaseProperties) { // ... also uses "classpath:config/liquibase/master.xml" }
 -liquibase changelog(master.xml):

XML

<databaseChangeLog> <include file="config/liquibase/changelog/00000000000000_initial_schema.xml"/> <!-- ~30 other included changelogs --> </databaseChangeLog>
Error上下文:
clocy,两个应用程序都没有问题开始。

dev,在导入转储后,应用程序会因BeanCreationException而失败。

高素质:

生产转储包含一个具有无效状态的databasechangelogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglog。 apts应用程序试图同时运行Liquibase迁移,从而导致锁冲突。
ass:
导入生产转储后,我们如何确保Databasechangelogloglogloglogloglogloglogloglogly表保持有效?是否有在具有共享数据库的多服务环境中处理液志的最佳实践?

1。使用会话级而不是交易级锁锁实现。如果数据库连接下降,会话级别的锁将自动释放。这样,databasechangelogloglock表中不会有任何垃圾,它将始终处于有效状态。

2。我将完全从您的转储中排除Databasechangelogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglogloglock。

postgresql spring-boot database-migration liquibase
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.