Spring Boot - Liquibase - 偶尔需要很长时间(60x)执行

jum*_*key 5 liquibase spring-boot

配置

我在类路径上2.3.2.RELEASE使用Spring Boot 。Liquibase

build.gradle 6.4.1:

id 'org.liquibase.gradle' version '2.0.4'
implementation 'org.liquibase:liquibase-core:4.0.0'
Run Code Online (Sandbox Code Playgroud)

application.properties:

spring.liquibase.changeLog=classpath:db/changelog/db.changelog-master.xml
spring.liquibase.user=username
spring.liquibase.password=password
Run Code Online (Sandbox Code Playgroud)

db.changelog-master.xml

<?xml version="1.0" encoding="UTF-8"?>   
<databaseChangeLog  
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
                      http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">  
   <preConditions>
      <dbms type="oracle"/>
   </preConditions>
   
   <include file="db/changelog/db.changelog-1.0.oracle.sql"/> 
</databaseChangeLog> 
Run Code Online (Sandbox Code Playgroud)

db.changelog-1.0.oracle.sql:

我的sql文件只有8个变更集,这些变更集之前都已经运行过(没有什么新的可以运行),例如:

--liquibase formatted sql

--changeset author:date-1
--preconditions onFail:MARK_RAN
--precondition-sql-check expectedResult:0 SELECT count(*) FROM user_tables WHERE table_name = 'XXX';
SQL 1;
:
Run Code Online (Sandbox Code Playgroud)

DATABASECHANGELOG表有预期的 8 个条目。

问题

我偶尔会遇到延迟问题,特别是当我刚刚启动 STS 4.5.1 IDE(通过 VPN 远程连接到数据库)时,但是当应用程序重新运行/重新启动时,我不会再遇到它,直到将来的某个时间。我无法随意更精确或重现该问题。

因此,我已经设置了logging.level.liquibase=DEBUG,这就是延迟发生地方:

延迟记录(约 4 分钟)

:
2020-07-27 12:55:33,015 [restartedMain] 调试 liquibase.servicelocator - 加载 liquibase.diff.compare.DatabaseObjectComparator 实例 com.datical.liquibase.ext.storedlogic.checkconstraint.CheckConstraintComparator

2020-07-27 <<<12:55:33,019>>> [restartedMain] DEBUG liquibase.util - 计算 1595825733018 的校验和为 2349116d802a7d8314d3cced0b6e2f95
2020-07-27 <<<12:59:29,948>>> [restartedMain] 调试liquibase.executor - 使用“jdbc”执行器执行

2020-07-27 12:59:29,966 [restartedMain] 调试 liquibase.executor - 使用 'jdbc' 执行器执行
2020-07-27 12:59:29,975 [restartedMain] INFO liquibase.changelog - 读取 XXX.DATABASECHANGELOG
2020- 07-27 12:59:29,976 [restartedMain] DEBUG liquibase.executor - 使用“jdbc”执行器执行
2020-07-27 12:59:30,188 [restartedMain] DEBUG liquibase.util - 计算 inputStream 的校验和为 69be88e5a0af937fcecaeb79f b44811d

无延迟记录(约 4 秒)

平时:

:
2020-07-27 13:12:04,672 [restartedMain] 调试 liquibase.servicelocator - 已加载 liquibase.diff.compare.DatabaseObjectComparator 实例 com.datical.liquibase.ext.storedlogic.StoredLogicComparator 2020-07-27 13:12:04,673 [ restartedMain] DEBUG liquibase.servicelocator - 已加载 liquibase.diff.compare.DatabaseObjectComparator 实例 com.datical.liquibase.ext.storedlogic.checkconstraint.CheckConstraintComparator

2020-07-27 <<<13:12:04,676>>> [restartedMain] DEBUG liquibase.util - 计算 1595826724675 的校验和为 56c113e10add546ca00dadcb20c71635
2020-07-27 <<<13:12:08,966>>> [重新启动edMain] 调试liquibase.executor - 使用“jdbc”执行器执行

2020-07-27 13:12:08,979 [restartedMain] 调试 liquibase.executor - 使用 'jdbc' 执行器执行
2020-07-27 13:12:08,988 [restartedMain] INFO liquibase.changelog - 读取 XXX.DATABASECHANGELOG
2020- 07-27 13:12:08,988 [restartedMain] DEBUG liquibase.executor - 使用“jdbc”执行器执行
2020-07-27 13:12:09,031 [restartedMain] DEBUG liquibase.util - 计算 inputStream 的校验和为 69be88e5a0af937fcecaeb79f b44811d

任何有关延迟来自何处的提示都值得赞赏。

编辑1

发布问题后,它让我意识到我不需要这个插件:
id 'org.liquibase.gradle' version '2.0.4'

我不知道这是否是延迟的原因,但我刚刚将其删除。

编辑2

大约4 分钟的延迟不是因为插件的原因,它仍然在发生:

2020-07-29 08:49:06,074 [restartedMain] DEBUG liquibase.util - 计算 1595983746073 的校验和为 431beddb3aa3ca2d61f0c8b37185ae04
2020-07-29 08:53:14,902 [restartedMain] DEBUG liquibase.executor - 使用“jdbc”执行器执行