changelog-lock-poll-rate
The changelog-lock-poll-rate
global parameter is an integer that sets the number of seconds Liquibase waits to check if a Working with changelogs lock has been released. The default value is 10
.
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
. The number of seconds Liquibase waits before checking the lock status at each interval is determined by the value of changelog-lock-poll-rate
.
Uses
If you need to run multiple database updates at once and want to minimize the amount of unused time between deployments, you can lower the value of changelog-lock-poll-rate
. This way, Liquibase will check more frequently whether the changelog lock has been released.
If you need to limit system resources, or if you know that the changelog lock will be active for a long time, you can raise the value of changelog-lock-poll-rate
.
Setting the changelog-lock-poll-rate
parameter
You can set changelog-lock-poll-rate
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.changelogLockPollRate
: <int>
CLI global parameter
In your command line, use a global parameter with a single Liquibase command:
liquibase --changelog-lock-poll-rate
=<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.changelogLockPollRate
=<int>
Windows syntax:
set JAVA_OPTS=-Dliquibase.changelogLockPollRate
=<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_POLL_RATE
=<int>
Windows syntax:
set LIQUIBASE_CHANGELOG_LOCK_POLL_RATE
=<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.