Class DefaultLockRepository
java.lang.Object
org.springframework.integration.jdbc.lock.DefaultLockRepository
- All Implemented Interfaces:
Closeable,AutoCloseable,Aware,InitializingBean,SmartInitializingSingleton,ApplicationContextAware,Lifecycle,Phased,SmartLifecycle,LockRepository
public class DefaultLockRepository
extends Object
implements LockRepository, InitializingBean, ApplicationContextAware, SmartInitializingSingleton, SmartLifecycle
The default implementation of the
LockRepository based on the
table from the script presented in the org/springframework/integration/jdbc/schema-*.sql.
This repository can't be shared between different JdbcLockRegistry instances.
Otherwise, it opens a possibility to break Lock contract,
where JdbcLockRegistry uses non-shared ReentrantLocks
for local synchronizations.
This class implements SmartLifecycle and calls
SELECT COUNT(REGION) FROM %sLOCK query
according to the provided prefix on start() to check if required table is present in DB.
The application context will fail to start if the table is not present.
This check can be disabled via setCheckDatabaseOnStart(boolean).
- Since:
- 4.3
- Author:
- Dave Syer, Artem Bilan, Glenn Renfro, Gary Russell, Alexandre Strubel, Ruslan Stelmachenko
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final StringDefault value for the table prefix property.static final DurationDefault value for the time-to-live property.Fields inherited from interface org.springframework.context.SmartLifecycle
DEFAULT_PHASE -
Constructor Summary
ConstructorsConstructorDescriptionDefaultLockRepository(DataSource dataSource) Constructor that initializes the client id that will be associated for all the locks persisted by the store instance to a randomUUID.DefaultLockRepository(DataSource dataSource, String id) Constructor that allows the user to specify a client id that will be associated for all the locks persisted by the store instance. -
Method Summary
Modifier and TypeMethodDescriptionbooleanAcquire a lock for a key.voidvoidvoidclose()voidRemove a lock from this repository.voidRemove all the expired locks.Return the current insert query.Return the current renew query.Return the current update query.booleanisAcquired(String lock) Check if a lock is held by this repository.booleanbooleanbooleanRenew the lease for a lock.voidsetApplicationContext(ApplicationContext applicationContext) voidsetCheckDatabaseOnStart(boolean checkDatabaseOnStart) The flag to perform a database check query on start or not.voidsetInsertQuery(String insertQuery) Set a customINSERTquery for a lock record.voidSpecify the prefix for target database table used from queries.voidA unique grouping identifier for all locks persisted with this store.voidsetRenewQuery(String renewQuery) Set a customINSERTquery for a lock record.voidsetTimeToLive(int timeToLive) Specify the time (in milliseconds) to expire deadlocks.voidsetTransactionManager(PlatformTransactionManager transactionManager) Set aPlatformTransactionManagerfor operations.voidsetUpdateQuery(String updateQuery) Set a customUPDATEquery for a lock record.voidstart()voidstop()Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.context.SmartLifecycle
getPhase, stop
-
Field Details
-
DEFAULT_TABLE_PREFIX
Default value for the table prefix property.- See Also:
-
DEFAULT_TTL
Default value for the time-to-live property.
-
-
Constructor Details
-
DefaultLockRepository
Constructor that initializes the client id that will be associated for all the locks persisted by the store instance to a randomUUID.- Parameters:
dataSource- theDataSourceused to maintain the lock repository.
-
DefaultLockRepository
Constructor that allows the user to specify a client id that will be associated for all the locks persisted by the store instance.- Parameters:
dataSource- theDataSourceused to maintain the lock repository.id- the client id to be associated with locks handled by the repository.- Since:
- 4.3.13
-
-
Method Details
-
setRegion
A unique grouping identifier for all locks persisted with this store. Using multiple regions allows the store to be partitioned (if necessary) for different purposes. Defaults toDEFAULT.- Parameters:
region- the region name to set
-
setPrefix
Specify the prefix for target database table used from queries.- Parameters:
prefix- the prefix to set (defaultINT_).
-
setTimeToLive
public void setTimeToLive(int timeToLive) Specify the time (in milliseconds) to expire deadlocks.- Parameters:
timeToLive- the time to expire deadlocks.
-
setTransactionManager
Set aPlatformTransactionManagerfor operations. Otherwise, a primaryPlatformTransactionManagerbean is obtained from the application context.- Parameters:
transactionManager- thePlatformTransactionManagerto use.- Since:
- 6.0
-
setApplicationContext
- Specified by:
setApplicationContextin interfaceApplicationContextAware- Throws:
BeansException
-
setUpdateQuery
Set a customUPDATEquery for a lock record. ThegetUpdateQuery()can be used as a template for customization. The default query is:UPDATE %sLOCK SET CLIENT_ID=?, CREATED_DATE=? WHERE REGION=? AND LOCK_KEY=? AND (CLIENT_ID=? OR CREATED_DATE<?)- Parameters:
updateQuery- the query to update a lock record.- Since:
- 6.1
- See Also:
-
getUpdateQuery
Return the current update query. Can be used in a setter as a concatenation of the default query and some extra hint.- Returns:
- the current update query.
- Since:
- 6.1
- See Also:
-
setInsertQuery
Set a customINSERTquery for a lock record. ThegetInsertQuery()can be used as a template for customization. The default query isINSERT INTO %sLOCK (REGION, LOCK_KEY, CLIENT_ID, CREATED_DATE) VALUES (?, ?, ?, ?). For example a PostgreSQLON CONFLICT DO NOTHINGhint can be provided like this:lockRepository.setInsertQuery(lockRepository.getInsertQuery() + " ON CONFLICT DO NOTHING");- Parameters:
insertQuery- the insert query for a lock record.- Since:
- 6.1
- See Also:
-
getInsertQuery
Return the current insert query. Can be used in a setter as a concatenation of the default query and some extra hint.- Returns:
- the current insert query.
- Since:
- 6.1
- See Also:
-
setRenewQuery
Set a customINSERTquery for a lock record. ThegetRenewQuery()can be used as a template for customization. The default query is:UPDATE %sLOCK SET CREATED_DATE=? WHERE REGION=? AND LOCK_KEY=? AND CLIENT_ID=?- Parameters:
renewQuery- the update query to renew a lock record.- Since:
- 6.1
- See Also:
-
getRenewQuery
Return the current renew query. Can be used in a setter as a concatenation of a default query and some extra hint.- Returns:
- the current renew query.
- Since:
- 6.1
- See Also:
-
setCheckDatabaseOnStart
public void setCheckDatabaseOnStart(boolean checkDatabaseOnStart) The flag to perform a database check query on start or not.- Parameters:
checkDatabaseOnStart- false to not perform the database check.- Since:
- 6.2
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceInitializingBean
-
afterSingletonsInstantiated
public void afterSingletonsInstantiated()- Specified by:
afterSingletonsInstantiatedin interfaceSmartInitializingSingleton
-
isAutoStartup
public boolean isAutoStartup()- Specified by:
isAutoStartupin interfaceSmartLifecycle
-
start
-
stop
-
isRunning
-
close
public void close()- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein interfaceLockRepository
-
delete
Description copied from interface:LockRepositoryRemove a lock from this repository.- Specified by:
deletein interfaceLockRepository- Parameters:
lock- the lock to remove.
-
acquire
Description copied from interface:LockRepositoryAcquire a lock for a key.- Specified by:
acquirein interfaceLockRepository- Parameters:
lock- the key for lock to acquire.- Returns:
- acquired or not.
-
isAcquired
Description copied from interface:LockRepositoryCheck if a lock is held by this repository.- Specified by:
isAcquiredin interfaceLockRepository- Parameters:
lock- the lock to check.- Returns:
- acquired or not.
-
deleteExpired
public void deleteExpired()Description copied from interface:LockRepositoryRemove all the expired locks.- Specified by:
deleteExpiredin interfaceLockRepository
-
renew
Description copied from interface:LockRepositoryRenew the lease for a lock.- Specified by:
renewin interfaceLockRepository- Parameters:
lock- the lock to renew.- Returns:
- renewed or not.
-