Class IsolationLevelDataSourceAdapter
- All Implemented Interfaces:
Wrapper
,CommonDataSource
,DataSource
,InitializingBean
DataSource
, applying the current
Spring transaction's isolation level (and potentially specified user credentials)
to every getConnection
call. Also applies the read-only flag,
if specified.
Can be used to proxy a target JNDI DataSource that does not have the desired isolation level (and user credentials) configured. Client code can work with this DataSource as usual, not worrying about such settings.
Inherits the capability to apply specific user credentials from its superclass
UserCredentialsDataSourceAdapter
; see the latter's javadoc for details
on that functionality (e.g. UserCredentialsDataSourceAdapter.setCredentialsForCurrentThread(java.lang.String, java.lang.String)
).
WARNING: This adapter simply calls
Connection.setTransactionIsolation(int)
and/or
Connection.setReadOnly(boolean)
for every Connection obtained from it.
It does, however, not reset those settings; it rather expects the target
DataSource to perform such resetting as part of its connection pool handling.
Make sure that the target DataSource properly cleans up such transaction state.
- Since:
- 2.0.3
- Author:
- Juergen Hoeller, Sam Brannen
- See Also:
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected Connection
doGetConnection
(String username, String password) Applies the current isolation level value and read-only flag to the returned Connection.protected Integer
Determine the current isolation level: either the transaction's isolation level or a statically defined isolation level.protected Boolean
Determine the current read-only flag: by default, the transaction's read-only hint.protected Integer
Return the statically specified isolation level, ornull
if none.void
setIsolationLevel
(int isolationLevel) Specify the default isolation level to use for Connection retrieval, according to the JDBCConnection
constants (equivalent to the corresponding SpringTransactionDefinition
constants).final void
setIsolationLevelName
(String constantName) Set the default isolation level by the name of the corresponding constant inTransactionDefinition
— for example,"ISOLATION_SERIALIZABLE"
.Methods inherited from class org.springframework.jdbc.datasource.UserCredentialsDataSourceAdapter
getConnection, getConnection, removeCredentialsFromCurrentThread, setCatalog, setCredentialsForCurrentThread, setPassword, setSchema, setUsername
Methods inherited from class org.springframework.jdbc.datasource.DelegatingDataSource
afterPropertiesSet, getLoginTimeout, getLogWriter, getParentLogger, getTargetDataSource, isWrapperFor, obtainTargetDataSource, setLoginTimeout, setLogWriter, setTargetDataSource, unwrap
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface javax.sql.CommonDataSource
createShardingKeyBuilder
Methods inherited from interface javax.sql.DataSource
createConnectionBuilder
-
Constructor Details
-
IsolationLevelDataSourceAdapter
public IsolationLevelDataSourceAdapter()
-
-
Method Details
-
setIsolationLevelName
Set the default isolation level by the name of the corresponding constant inTransactionDefinition
— for example,"ISOLATION_SERIALIZABLE"
.If not specified, the target DataSource's default will be used. Note that a transaction-specific isolation value will always override any isolation setting specified at the DataSource level.
- Parameters:
constantName
- name of the constant- Throws:
IllegalArgumentException
- See Also:
-
setIsolationLevel
public void setIsolationLevel(int isolationLevel) Specify the default isolation level to use for Connection retrieval, according to the JDBCConnection
constants (equivalent to the corresponding SpringTransactionDefinition
constants).If not specified, the target DataSource's default will be used. Note that a transaction-specific isolation value will always override any isolation setting specified at the DataSource level.
- See Also:
-
Connection.TRANSACTION_READ_UNCOMMITTED
Connection.TRANSACTION_READ_COMMITTED
Connection.TRANSACTION_REPEATABLE_READ
Connection.TRANSACTION_SERIALIZABLE
TransactionDefinition.ISOLATION_READ_UNCOMMITTED
TransactionDefinition.ISOLATION_READ_COMMITTED
TransactionDefinition.ISOLATION_REPEATABLE_READ
TransactionDefinition.ISOLATION_SERIALIZABLE
TransactionDefinition.getIsolationLevel()
TransactionSynchronizationManager.getCurrentTransactionIsolationLevel()
-
getIsolationLevel
Return the statically specified isolation level, ornull
if none. -
doGetConnection
protected Connection doGetConnection(@Nullable String username, @Nullable String password) throws SQLException Applies the current isolation level value and read-only flag to the returned Connection.- Overrides:
doGetConnection
in classUserCredentialsDataSourceAdapter
- Parameters:
username
- the username to usepassword
- the password to use- Returns:
- the Connection
- Throws:
SQLException
- See Also:
-
getCurrentIsolationLevel
Determine the current isolation level: either the transaction's isolation level or a statically defined isolation level.- Returns:
- the current isolation level, or
null
if none - See Also:
-
getCurrentReadOnlyFlag
Determine the current read-only flag: by default, the transaction's read-only hint.- Returns:
- whether there is a read-only hint for the current scope
- See Also:
-