是否存在liquibase锁定超时?

时间:2015-05-21 23:52:50

标签: timeout locking liquibase lock-timeout

你可以在这里看到问题:(liquibase-lock-reasons)当客户端Liquibase在Liquibase操作被中断时锁定,使liquibase处于锁定状态。

我想知道是否有办法配置Liquibase从LOCKGRANTED列中的日期和时间自动检测这种情况。我想如果你已经锁上了一个小时 - 你应该把它叫做过期的锁。

我的问题是:是否存在liquibase锁定超时?

2 个答案:

答案 0 :(得分:5)

没有锁定超时。 Liquibase不知道期望changeSets需要多长时间,如果有些人在大型表上做DML,他们可能需要数小时才能成功运行。

您可以使用releaseLocks命令手动清除锁定,或者可以将liquibase.lockservice.StandardLockService子类化为添加其他逻辑,以便在设置的一段时间后覆盖锁定。

如果您只有一台机器可以更新数据库,您也可以考虑https://github.com/liquibase/liquibase-nochangeloglock,这会完全禁用锁定支持。

我认为它是一个可配置的有用功能,因此我添加了https://liquibase.jira.com/browse/CORE-2375来跟踪该功能。

答案 1 :(得分:0)

实际上,查看StandardLockService的代码,可以使用系统属性" liquibase.changeLogLockWaitTimeInMinutes" ...

进行配置。
public class StandardLockService implements LockService {
    ...
    private long changeLogLockWaitTime = 300000L;
    ....
    public StandardLockService() {
        try {
            this.changeLogLockWaitTime = 60000L * Long.parseLong(System.getProperty("liquibase.changeLogLockWaitTimeInMinutes"));
            LogFactory.getLogger().info("lockWaitTime change to: " + this.changeLogLockWaitTime);
        } catch (NumberFormatException var2) {
            ;
        }
    }