changelog-lock-wait-time-in-minutes

The changelog-lock-wait-time-in-minutes global parameter is an integer value that sets the amount of time Liquibase waits for a locked database to become available. The default value is 5.

DATABASECHANGELOGLOCK table

The DATABASECHANGELOGLOCK table only allows a single instance of Liquibase to run at a time. This prevents conflicts between multiple developers working at the same time or multiple servers in a cluster that auto-run Liquibase on startup.

DATABASECHANGELOGLOCK has a column named LOCKED that is set to 1 while Liquibase is running and 0 otherwise. If you try to run Liquibase while the lock record is active, the following message is printed to STDOUT:

Waiting for changelog lock....

This message repeats until LOCKED is set to 0. If the amount of time specified in changelog-lock-wait-time-in-minutes passes and the lock is not released, Liquibase stops running.

Uses

Liquibase doesn’t automatically time out if a database update takes a long time to finish. If you need to run multiple database updates at once, and each of them takes a long time to complete, you can raise the value of changelog-lock-wait-time-in-minutes. This way, you don’t have to re-run commands that timed out.

If you need to limit system resources by halting processes in a "waiting" state, you can lower the value of changelog-lock-wait-time-in-minutes.

Setting the changelog-lock-wait-time-in-minutes parameter

You can set changelog-lock-wait-time-in-minutes in four ways:

  • In the Liquibase properties file
  • As a global parameter in the CLI
  • As a JVM system property
  • As an environment variable (Liquibase Pro)

Liquibase properties file parameter

In Liquibase 4.1+, add the following to Liquibase properties file:

liquibase.changelogLockWaitTimeInMinutes: <int>

CLI global parameter

Tip: All commands and parameters use the --kebab-case format in the CLI environment. This is the format Liquibase recommends for best results. If your preference is camelCase, it will still work in the CLI.

In your command line, use a global parameter with a single Liquibase command:

liquibase --changelog-lock-wait-time-in-minutes=<int> update --changelog-file=dbchangelog.xml

Java system property

In your command line, use the JAVA_OPTS Environment Variable to set a JVM system property:

Mac/Linux syntax:

JAVA_OPTS=-Dliquibase.changelogLockWaitTimeInMinutes=<int>

Windows syntax:

set JAVA_OPTS=-Dliquibase.changelogLockWaitTimeInMinutes=<int>

Note: To use a Liquibase command alongside JAVA_OPTS, add && liquibase <command> to the end of your input.

Environment variable (Liquibase Pro)

In Liquibase Pro, set an environment variable:

Mac/Linux syntax:

LIQUIBASE_CHANGELOG_LOCK_WAIT_TIME_IN_MINUTES=<int>

Windows syntax:

set LIQUIBASE_CHANGELOG_LOCK_WAIT_TIME_IN_MINUTES=<int>

Note: These environment variable commands only apply to the current shell. If you need to pass an environment variable to a child process without affecting the parent process, you can use the export command on Mac/Linux or the setx command on Windows.

Related links