java.lang.Object
org.springframework.transaction.support.AbstractPlatformTransactionManager
org.springframework.kafka.transaction.KafkaTransactionManager<K, V>
All Implemented Interfaces:
Serializable , KafkaAwareTransactionManager <K, V> , PlatformTransactionManager , TransactionManager
public class KafkaTransactionManager<K, V> extends AbstractPlatformTransactionManager implements KafkaAwareTransactionManager <K, V>
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

    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
    Set the maximum time to wait when closing a producer; default 5 seconds.
    setTransactionIdPrefix ( String transactionIdPrefix)
    Set a transaction id prefix to override the prefix in the producer factory.

    Methods inherited from class org.springframework.transaction.support. AbstractPlatformTransactionManager

    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

    Methods inherited from interface org.springframework.transaction. PlatformTransactionManager

    commit , getTransaction , rollback

    KafkaTransactionManager

    public KafkaTransactionManager ( ProducerFactory < K , V > producerFactory)
    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

    public ProducerFactory < K , V > 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

    protected void doBegin ( Object transaction, TransactionDefinition definition)
    Specified by:
    doBegin in class AbstractPlatformTransactionManager

    doSetRollbackOnly

    protected void doSetRollbackOnly ( DefaultTransactionStatus status)
    Overrides:
    doSetRollbackOnly in class AbstractPlatformTransactionManager

    doCleanupAfterCompletion

    protected void doCleanupAfterCompletion ( Object transaction)
    Overrides:
    doCleanupAfterCompletion in class AbstractPlatformTransactionManager