java.lang.Object
org.springframework.transaction.support.AbstractPlatformTransactionManager
org.springframework.kafka.transaction.KafkaTransactionManager<K,
V>
All Implemented Interfaces:
Serializable
,
KafkaAwareTransactionManager
<K,
V>
,
PlatformTransactionManager
,
TransactionManager
PlatformTransactionManager
implementation for a
single Kafka
ProducerFactory
. Binds a Kafka producer from the specified
ProducerFactory to the thread, potentially allowing for one thread-bound producer per
ProducerFactory.
This local strategy is an alternative to executing Kafka operations within, and
synchronized with, external transactions. This strategy is
not
able to provide
XA transactions, for example in order to share transactions between messaging and
database access.
Application code is required to retrieve the transactional Kafka resources via
ProducerFactoryUtils.getTransactionalResourceHolder(ProducerFactory, String, java.time.Duration)
.
Spring's
KafkaTemplate
will auto
detect a thread-bound Producer and automatically participate in it.
The use of
DefaultKafkaProducerFactory
as a target for this transaction manager is strongly
recommended.
Because it caches producers for reuse.
Transaction synchronization is turned off by default, as this manager might be used
alongside a datastore-based Spring transaction manager such as the JDBC
org.springframework.jdbc.datasource.DataSourceTransactionManager, which has stronger
needs for synchronization.
Author:
Gary Russell
See Also:
Serialized Form
Nested Class Summary
AbstractPlatformTransactionManager.SuspendedResourcesHolder
Field Summary
logger
,
SYNCHRONIZATION_ALWAYS
,
SYNCHRONIZATION_NEVER
,
SYNCHRONIZATION_ON_ACTUAL_TRANSACTION
Set the maximum time to wait when closing a producer; default 5 seconds.
Set a transaction id prefix to override the prefix in the producer factory.
commit
,
determineTimeout
,
getDefaultTimeout
,
getTransaction
,
getTransactionSynchronization
,
invokeAfterCompletion
,
isFailEarlyOnGlobalRollbackOnly
,
isGlobalRollbackOnParticipationFailure
,
isNestedTransactionAllowed
,
isRollbackOnCommitFailure
,
isValidateExistingTransaction
,
newTransactionStatus
,
prepareForCommit
,
prepareSynchronization
,
prepareTransactionStatus
,
registerAfterCompletionWithExistingTransaction
,
resume
,
rollback
,
setDefaultTimeout
,
setFailEarlyOnGlobalRollbackOnly
,
setGlobalRollbackOnParticipationFailure
,
setNestedTransactionAllowed
,
setRollbackOnCommitFailure
,
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
commit
,
getTransaction
,
rollback
KafkaTransactionManager
Create a new KafkaTransactionManager, given a ProducerFactory.
Transaction synchronization is turned off by default, as this manager might be used alongside a datastore-based
Spring transaction manager like DataSourceTransactionManager, which has stronger needs for synchronization. Only
one manager is allowed to drive synchronization at any point of time.
Parameters:
producerFactory
- the ProducerFactory to use
setTransactionIdPrefix
public
void
setTransactionIdPrefix
(
String
transactionIdPrefix)
Set a transaction id prefix to override the prefix in the producer factory.
Parameters:
transactionIdPrefix
- the prefix.
Since:
getProducerFactory
Get the producer factory.
Specified by:
getProducerFactory
in interface
KafkaAwareTransactionManager
<
K
,
V
>
Returns:
the producerFactory
setCloseTimeout
public
void
setCloseTimeout
(
Duration
closeTimeout)
Set the maximum time to wait when closing a producer; default 5 seconds.
Parameters:
closeTimeout
- the close timeout.
Since:
2.1.14
doBegin
Specified by:
doBegin
in class
AbstractPlatformTransactionManager
doSetRollbackOnly
Overrides:
doSetRollbackOnly
in class
AbstractPlatformTransactionManager
doCleanupAfterCompletion
protected
void
doCleanupAfterCompletion
(
Object
transaction)
Overrides:
doCleanupAfterCompletion
in class
AbstractPlatformTransactionManager