or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.md
tile.json

tessl/maven-io-seata--seata-spring-boot-starter

Spring Boot starter for Apache Seata distributed transaction solution

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/io.seata/seata-spring-boot-starter@2.0.x

To install, run

npx @tessl/cli install tessl/maven-io-seata--seata-spring-boot-starter@2.0.0

index.mddocs/

Seata Spring Boot Starter

Spring Boot starter for Apache Seata distributed transaction solution. This starter enables seamless integration of Seata's distributed transaction capabilities into Spring Boot applications through automatic configuration of Transaction Coordinator (TC), Transaction Manager (TM), and Resource Manager (RM) components. It supports multiple transaction modes including AT, TCC, SAGA, and XA for handling data consistency in distributed microservices architectures.

Package Information

  • Package Name: seata-spring-boot-starter
  • Package Type: maven
  • Group ID: io.seata
  • Language: Java
  • Installation: Add dependency to pom.xml:
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-boot-starter</artifactId>
    <version>2.0.0</version>
</dependency>

Core Imports

// Core imports for using distributed transactions
import io.seata.spring.annotation.GlobalTransactional;
import io.seata.tm.api.FailureHandler;
import io.seata.spring.annotation.GlobalTransactionScanner;
import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator;
import io.seata.spring.boot.autoconfigure.properties.SeataProperties;

Basic Usage

Add the starter dependency and configure your application properties:

# application.yml
seata:
  enabled: true
  application-id: my-app
  tx-service-group: my-tx-group
  enable-auto-data-source-proxy: true
  data-source-proxy-mode: AT
// Application class - no additional configuration needed
@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

// Service class with distributed transactions
@Service
public class OrderService {
    
    @GlobalTransactional
    public void createOrder(Order order) {
        // This method will be wrapped in a distributed transaction
        orderRepository.save(order);
        inventoryService.reduceStock(order.getProductId(), order.getQuantity());
        paymentService.processPayment(order.getPaymentInfo());
    }
}

Architecture

The starter provides auto-configuration for Seata distributed transaction framework through four main components:

  • SeataAutoConfiguration: Core transaction management and failure handling
  • SeataDataSourceAutoConfiguration: Automatic DataSource proxy creation for transaction coordination
  • SeataHttpAutoConfiguration: Web MVC integration for transaction context propagation
  • SeataSagaAutoConfiguration: State machine engine configuration for SAGA pattern support

All configurations are conditional and activated based on properties and bean presence, ensuring minimal overhead when features are not used.

Capabilities

Core Transaction Management

Provides the foundational distributed transaction capabilities including global transaction scanning and failure handling.

// Auto-configured beans (managed automatically by Spring Boot)
// Required imports for this API section:
// import io.seata.spring.annotation.GlobalTransactionScanner;
// import io.seata.tm.api.FailureHandler;
// import io.seata.spring.annotation.ScannerChecker;
// import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;

// Global transaction scanner for detecting @GlobalTransactional annotations
static GlobalTransactionScanner globalTransactionScanner(
    SeataProperties seataProperties, 
    FailureHandler failureHandler,
    ConfigurableListableBeanFactory beanFactory,
    @Autowired(required = false) List<ScannerChecker> scannerCheckers
);

// Default failure handler for transaction failures
FailureHandler failureHandler();

Configuration:

  • Enabled when seata.enabled=true (default: true)
  • Automatically scans for @GlobalTransactional annotations
  • Configurable package scanning and exclusions

DataSource Auto-Proxying

Automatically wraps DataSource beans with Seata proxies to enable transaction coordination across multiple databases.

// Required imports: import io.seata.spring.annotation.datasource.SeataAutoDataSourceProxyCreator;

// Auto-configured bean for DataSource proxying
static SeataAutoDataSourceProxyCreator seataAutoDataSourceProxyCreator(SeataProperties seataProperties);

Configuration:

  • Enabled when seata.enable-auto-data-source-proxy=true (default: true)
  • Supports AT, XA, and TCC transaction modes
  • Configurable exclusions for specific DataSource beans

Web Integration

Provides HTTP request/response interceptor integration for transaction context propagation in web applications.

// Required imports:
// import io.seata.integration.http.JakartaSeataWebMvcConfigurer;
// import io.seata.integration.http.SeataWebMvcConfigurer;

// Auto-configured web MVC configurers (Jakarta EE 9+)
JakartaSeataWebMvcConfigurer jakartaSeataWebMvcConfigurer();

// Auto-configured web MVC configurers (Java EE / Jakarta EE 8)
SeataWebMvcConfigurer seataWebMvcConfigurer();

Configuration:

  • Enabled for web applications with seata.client.http.interceptor-enabled=true (default: true)
  • Automatically detects Jakarta vs javax servlet APIs
  • Handles transaction context propagation across HTTP boundaries

SAGA Pattern Support

Configures state machine engine for complex distributed transaction workflows using the SAGA pattern.

// Required imports:
// import io.seata.saga.engine.StateMachineConfig;
// import io.seata.saga.engine.StateMachineEngine;
// import java.util.concurrent.ThreadPoolExecutor;
// import java.util.concurrent.RejectedExecutionHandler;
// import javax.sql.DataSource;

// State machine configuration for SAGA pattern
StateMachineConfig dbStateMachineConfig(
    DataSource dataSource,
    @Qualifier("seataSagaDataSource") @Autowired(required = false) DataSource sagaDataSource,
    @Qualifier("seataSagaAsyncThreadPoolExecutor") @Autowired(required = false) ThreadPoolExecutor threadPoolExecutor,
    @Value("${spring.application.name:}") String applicationId,
    @Value("${seata.tx-service-group:}") String txServiceGroup
);

// State machine engine for executing SAGA workflows
StateMachineEngine stateMachineEngine(StateMachineConfig config);

// Async thread pool for SAGA execution (conditional on enable-async=true)
ThreadPoolExecutor sagaAsyncThreadPoolExecutor(
    SagaAsyncThreadPoolProperties properties,
    RejectedExecutionHandler rejectedExecutionHandler
);

// Rejection handler for async operations
RejectedExecutionHandler sagaRejectedExecutionHandler();

Configuration:

  • Enabled when both seata.enabled=true and seata.saga.enabled=true
  • Async thread pool enabled when seata.saga.state-machine.enable-async=true
  • Configurable thread pool settings via seata.saga.state-machine.async-thread-pool.*
  • Database-backed state machine persistence

Configuration Properties

Main Configuration (seata.*)

// import io.seata.spring.boot.autoconfigure.properties.SeataProperties;

class SeataProperties {
    // Enable/disable Seata auto-configuration
    boolean enabled = true;
    
    // Application identifier for transaction coordination
    String applicationId;
    
    // Transaction service group name
    String txServiceGroup;
    
    // Enable automatic DataSource proxy creation
    boolean enableAutoDataSourceProxy = true;
    
    // DataSource proxy mode: AT, XA, TCC
    String dataSourceProxyMode = "AT";
    
    // Use JDK proxy instead of CGLIB
    boolean useJdkProxy = false;
    
    // Packages to scan for @GlobalTransactional annotations
    String[] scanPackages = {};
    
    // Bean names to exclude from transaction scanning
    String[] excludesForScanning = {};
    
    // DataSource bean names to exclude from auto-proxying
    String[] excludesForAutoProxying = {};
    
    // Alibaba Cloud access credentials
    String accessKey;
    String secretKey;
}

SAGA Thread Pool Configuration (seata.saga.state-machine.async-thread-pool.*)

// import io.seata.spring.boot.autoconfigure.properties.SagaAsyncThreadPoolProperties;

class SagaAsyncThreadPoolProperties {
    // Core pool size for async operations
    int corePoolSize = 1;
    
    // Maximum pool size
    int maxPoolSize = 20;
    
    // Keep alive time in seconds
    int keepAliveTime = 60;
}

Spring Cloud Alibaba Integration (spring.cloud.alibaba.seata.*)

// import io.seata.spring.boot.autoconfigure.properties.SpringCloudAlibabaConfiguration;

class SpringCloudAlibabaConfiguration {
    // Application ID (defaults to spring.application.name)
    String applicationId;
    
    // Transaction service group
    String txServiceGroup;
}

Constants and Bean Names

// import io.seata.spring.boot.autoconfigure.StarterConstants;

// Configuration property prefixes
interface StarterConstants {
    String SEATA_PREFIX = "seata";
    String SEATA_SPRING_CLOUD_ALIBABA_PREFIX = "spring.cloud.alibaba.seata";
    String SAGA_PREFIX = "seata.saga";
    String SAGA_STATE_MACHINE_PREFIX = "seata.saga.state-machine";
    String SAGA_ASYNC_THREAD_POOL_PREFIX = "seata.saga.state-machine.async-thread-pool";
    String CLIENT_PREFIX = "seata.client";
    String HTTP_PREFIX = "seata.client.http";
}

// Pre-defined bean names for SAGA components (from SeataSagaAutoConfiguration)
interface SagaBeanConstants {
    String SAGA_DATA_SOURCE_BEAN_NAME = "seataSagaDataSource";
    String SAGA_ASYNC_THREAD_POOL_EXECUTOR_BEAN_NAME = "seataSagaAsyncThreadPoolExecutor";
    String SAGA_REJECTED_EXECUTION_HANDLER_BEAN_NAME = "seataSagaRejectedExecutionHandler";
}

Transaction Modes

The starter supports multiple distributed transaction modes:

  • AT Mode: Automatic compensation based on SQL parsing and reverse SQL generation
  • TCC Mode: Try-Confirm-Cancel pattern with manual compensation
  • SAGA Mode: State machine-based long transaction pattern
  • XA Mode: Traditional two-phase commit protocol for XA-compliant resources

Error Handling

The starter provides automatic failure handling through:

  • DefaultFailureHandlerImpl: Default implementation for transaction failures
  • Configurable timeout and retry policies
  • Integration with Spring Boot's error handling mechanisms
  • Detailed logging for transaction coordination issues

Configure custom failure handling by providing your own FailureHandler bean:

@Configuration
public class SeataConfig {
    
    @Bean
    @Primary
    public FailureHandler customFailureHandler() {
        return new CustomFailureHandlerImpl();
    }
}