Class DefaultLockRepository
java.lang.Object
org.springframework.integration.jdbc.lock.DefaultLockRepository
- All Implemented Interfaces:
Closeable,AutoCloseable,Aware,InitializingBean,SmartInitializingSingleton,ApplicationContextAware,LockRepository
public class DefaultLockRepository
extends Object
implements LockRepository, InitializingBean, ApplicationContextAware, SmartInitializingSingleton
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.
- Since:
- 4.3
- Author:
- Dave Syer, Artem Bilan, Glenn Renfro, Gary Russell, Alexandre Strubel, Ruslan Stelmachenko
-
Field Summary
Fields -
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.booleanRenew the lease for a lock.voidsetApplicationContext(ApplicationContext applicationContext) 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.
-
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:
-
afterPropertiesSet
public void afterPropertiesSet()- Specified by:
afterPropertiesSetin interfaceInitializingBean
-
afterSingletonsInstantiated
public void afterSingletonsInstantiated()- Specified by:
afterSingletonsInstantiatedin interfaceSmartInitializingSingleton
-
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.
-