Class JdbcTransactionManager
- All Implemented Interfaces:
Serializable
,InitializingBean
,ConfigurableTransactionManager
,PlatformTransactionManager
,ResourceTransactionManager
,TransactionManager
JdbcAccessor
-aligned subclass of the plain DataSourceTransactionManager
,
adding common JDBC exception translation for the commit and rollback step.
Typically used in combination with JdbcTemplate
which applies the same SQLExceptionTranslator
infrastructure by default.
Exception translation is specifically relevant for commit steps in serializable
transactions (e.g. on Postgres) where concurrency failures may occur late on commit.
This allows for throwing ConcurrencyFailureException
to
callers instead of TransactionSystemException
.
Analogous to HibernateTransactionManager
and JpaTransactionManager
,
this transaction manager may throw DataAccessException
from AbstractPlatformTransactionManager.commit(org.springframework.transaction.TransactionStatus)
and possibly also from AbstractPlatformTransactionManager.rollback(org.springframework.transaction.TransactionStatus)
. Calling code should be prepared for handling
such exceptions next to TransactionException
,
which is generally sensible since TransactionSynchronization
implementations
may also throw such exceptions in their flush
and beforeCommit
phases.
- Since:
- 5.3
- Author:
- Juergen Hoeller, Sebastien Deleuze
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
AbstractPlatformTransactionManager.SuspendedResourcesHolder
-
Field Summary
Fields inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
logger, SYNCHRONIZATION_ALWAYS, SYNCHRONIZATION_NEVER, SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
-
Constructor Summary
ConstructorDescriptionCreate a newJdbcTransactionManager
instance.JdbcTransactionManager
(DataSource dataSource) Create a newJdbcTransactionManager
instance. -
Method Summary
Modifier and TypeMethodDescriptionvoid
Eagerly initialize the exception translator, if demanded, creating a default one for the specified DataSource if none set.Return the exception translator to use for this instance, creating a default if necessary.boolean
Return whether to lazily initialize the SQLExceptionTranslator for this transaction manager.void
setDatabaseProductName
(String dbName) Specify the database product name for theDataSource
that this transaction manager operates on.void
setExceptionTranslator
(SQLExceptionTranslator exceptionTranslator) Set the exception translator for this transaction manager.void
setLazyInit
(boolean lazyInit) Set whether to lazily initialize the SQLExceptionTranslator for this transaction manager, on first encounter of an SQLException.protected RuntimeException
translateException
(String task, SQLException ex) This implementation attempts to use theSQLExceptionTranslator
, falling back to aTransactionSystemException
.Methods inherited from class org.springframework.jdbc.datasource.DataSourceTransactionManager
doBegin, doCleanupAfterCompletion, doCommit, doGetTransaction, doResume, doRollback, doSetRollbackOnly, doSuspend, getDataSource, getResourceFactory, isEnforceReadOnly, isExistingTransaction, obtainDataSource, prepareTransactionalConnection, setDataSource, setEnforceReadOnly
Methods inherited from class org.springframework.transaction.support.AbstractPlatformTransactionManager
commit, determineTimeout, getDefaultTimeout, getTransaction, getTransactionExecutionListeners, getTransactionSynchronization, invokeAfterCompletion, isFailEarlyOnGlobalRollbackOnly, isGlobalRollbackOnParticipationFailure, isNestedTransactionAllowed, isRollbackOnCommitFailure, isValidateExistingTransaction, prepareForCommit, registerAfterCompletionWithExistingTransaction, resume, rollback, setDefaultTimeout, setFailEarlyOnGlobalRollbackOnly, setGlobalRollbackOnParticipationFailure, setNestedTransactionAllowed, setRollbackOnCommitFailure, setTransactionExecutionListeners, setTransactionSynchronization, setTransactionSynchronizationName, setValidateExistingTransaction, shouldCommitOnGlobalRollbackOnly, suspend, triggerBeforeCommit, triggerBeforeCompletion, useSavepointForNestedTransaction
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.transaction.ConfigurableTransactionManager
addListener
Methods inherited from interface org.springframework.transaction.PlatformTransactionManager
commit, getTransaction, rollback
-
Constructor Details
-
JdbcTransactionManager
public JdbcTransactionManager()Create a newJdbcTransactionManager
instance. ADataSource
has to be set to be able to use it. -
JdbcTransactionManager
Create a newJdbcTransactionManager
instance.- Parameters:
dataSource
- the JDBC DataSource to manage transactions for
-
-
Method Details
-
setDatabaseProductName
Specify the database product name for theDataSource
that this transaction manager operates on. This allows for initializing aSQLErrorCodeSQLExceptionTranslator
without obtaining aConnection
from theDataSource
to get the meta-data.- Parameters:
dbName
- the database product name that identifies the error codes entry- See Also:
-
setExceptionTranslator
Set the exception translator for this transaction manager.A
SQLErrorCodeSQLExceptionTranslator
used by default if a user-provided `sql-error-codes.xml` file has been found in the root of the classpath. Otherwise,SQLExceptionSubclassTranslator
serves as the default translator as of 6.0. -
getExceptionTranslator
Return the exception translator to use for this instance, creating a default if necessary. -
setLazyInit
public void setLazyInit(boolean lazyInit) Set whether to lazily initialize the SQLExceptionTranslator for this transaction manager, on first encounter of an SQLException. Default is "true"; can be switched to "false" for initialization on startup.Early initialization just applies if
afterPropertiesSet()
is called.- See Also:
-
isLazyInit
public boolean isLazyInit()Return whether to lazily initialize the SQLExceptionTranslator for this transaction manager.- See Also:
-
afterPropertiesSet
public void afterPropertiesSet()Eagerly initialize the exception translator, if demanded, creating a default one for the specified DataSource if none set.- Specified by:
afterPropertiesSet
in interfaceInitializingBean
- Overrides:
afterPropertiesSet
in classDataSourceTransactionManager
-
translateException
This implementation attempts to use theSQLExceptionTranslator
, falling back to aTransactionSystemException
.- Overrides:
translateException
in classDataSourceTransactionManager
- Parameters:
task
- the task description (commit or rollback)ex
- the SQLException thrown from commit/rollback- Returns:
- the translated exception to throw, either a
DataAccessException
or aTransactionException
- See Also:
-