or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

core-transaction-management.mddatasource-auto-proxying.mdhttp-transaction-propagation.mdindex.mdsaga-pattern-support.md
tile.json

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

Spring Boot starter for Seata distributed transaction solution with automatic configuration and integration capabilities

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

To install, run

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

index.mddocs/

Seata Spring Boot Starter

Seata Spring Boot Starter provides automatic configuration and integration of Seata's distributed transaction capabilities into Spring Boot applications. It enables seamless transaction coordination across multiple services and databases with minimal configuration, supporting AT (Automatic Transaction), XA, TCC (Try-Confirm-Cancel), and Saga transaction patterns for microservices architectures.

Package Information

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

Core Dependencies

The starter automatically includes:

<!-- Core Seata functionality -->
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-all</artifactId>
</dependency>

<!-- Auto-configuration components -->
<dependency>
    <groupId>io.seata</groupId>
    <artifactId>seata-spring-autoconfigure-client</artifactId>
</dependency>

Basic Usage

1. Add Dependency and Configuration

Add the starter dependency to your Spring Boot project and configure basic properties:

# Enable Seata (default: true)
seata.enabled=true

# Application configuration
seata.application-id=my-application
seata.tx-service-group=my-tx-group

# Registry and config center (example for Nacos)
seata.registry.type=nacos
seata.registry.nacos.server-addr=127.0.0.1:8848
seata.config.type=nacos
seata.config.nacos.server-addr=127.0.0.1:8848

2. Use Global Transactions

import io.seata.spring.annotation.GlobalTransactional;
import org.springframework.stereotype.Service;

@Service
public class BusinessService {
    
    @GlobalTransactional
    public void handleBusinessLogic() {
        // Your business logic here
        // Multiple database operations across different services
        // will be coordinated as a distributed transaction
        
        orderService.createOrder();
        accountService.deductBalance();
        inventoryService.decreaseStock();
    }
}

3. Automatic DataSource Proxying

DataSources are automatically proxied for AT mode transactions:

@Configuration
public class DataSourceConfig {
    
    @Bean
    @Primary
    public DataSource dataSource() {
        // Your DataSource configuration
        // Will be automatically proxied by Seata
        return new HikariDataSource();
    }
}

Architecture

Seata Spring Boot Starter provides a comprehensive auto-configuration framework built around several key components:

  • Auto-Configuration Classes: Four main configuration classes that automatically set up Seata components based on application context and properties
  • Global Transaction Scanner: Scans for @GlobalTransactional annotations and manages transaction lifecycle
  • DataSource Proxying: Automatic proxy creation for DataSource beans to enable AT/XA transaction modes
  • HTTP Integration: Request interceptors for transaction context propagation across HTTP calls
  • Saga Engine: State machine-based long-running transaction support with async execution capabilities

The starter follows Spring Boot's auto-configuration patterns, enabling zero-configuration distributed transactions while providing extensive customization options through properties.

Capabilities

Core Transaction Management

Automatic configuration of Seata's global transaction scanning and management capabilities. Provides the foundation for distributed transaction coordination across microservices.

// Auto-configured beans
@ConditionalOnProperty(prefix = "seata", name = "enabled", havingValue = "true", matchIfMissing = true)
public class SeataAutoConfiguration {
    
    @Bean("failureHandler")
    public FailureHandler failureHandler();
    
    @Bean
    public static GlobalTransactionScanner globalTransactionScanner(
        SeataProperties seataProperties, 
        FailureHandler failureHandler,
        ConfigurableListableBeanFactory beanFactory,
        List<ScannerChecker> scannerCheckers
    );
}

Core Transaction Management

DataSource Auto-Proxying

Automatic DataSource proxy creation for AT (Automatic Transaction) and XA transaction modes. Enables transparent database transaction management without manual proxy configuration.

@ConditionalOnBean(DataSource.class)
@ConditionalOnExpression("${seata.enabled:true} && ${seata.enableAutoDataSourceProxy:true}")
public class SeataDataSourceAutoConfiguration {
    
    @Bean("seataAutoDataSourceProxyCreator")
    public static SeataAutoDataSourceProxyCreator seataAutoDataSourceProxyCreator(
        SeataProperties seataProperties
    );
}

DataSource Auto-Proxying

HTTP Transaction Propagation

HTTP request interceptor configuration for propagating transaction context across web service calls. Supports both javax and Jakarta EE servlet environments.

@Configuration(proxyBeanMethods = false)
@ConditionalOnWebApplication
@ConditionalOnMissingBean(SeataWebMvcConfigurer.class)
@ConditionalOnProperty(prefix = "seata.client.http", name = "interceptor-enabled", havingValue = "true", matchIfMissing = true)
@AutoConfigureOrder(Ordered.LOWEST_PRECEDENCE)
public class SeataHttpAutoConfiguration {
    
    @Bean
    @ConditionalOnClass(name = "jakarta.servlet.http.HttpServletRequest")
    public JakartaSeataWebMvcConfigurer jakartaSeataWebMvcConfigurer();
    
    @Bean
    @ConditionalOnMissingBean(JakartaSeataWebMvcConfigurer.class)
    public SeataWebMvcConfigurer seataWebMvcConfigurer();
}

HTTP Transaction Propagation

Saga Pattern Support

Auto-configuration for Saga distributed transaction pattern with state machine engine and async execution support. Ideal for long-running business processes and complex workflow coordination.

@Configuration(proxyBeanMethods = false)
@ConditionalOnProperty({"seata.enabled", "seata.saga.enabled"})
public class SeataSagaAutoConfiguration {
    
    @Bean
    @ConditionalOnBean(DataSource.class)
    @ConditionalOnMissingBean
    @ConfigurationProperties("seata.saga.state-machine")
    public 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
    );
    
    @Bean
    @ConditionalOnMissingBean
    public StateMachineEngine stateMachineEngine(StateMachineConfig config);
}

Saga Pattern Support

Configuration Properties

Core Properties (seata.*)

// Main configuration class
@ConfigurationProperties(prefix = "seata")
public class SeataProperties {
    
    // Enable/disable Seata auto-configuration
    private boolean enabled = true;
    
    // Application identifier
    private String applicationId;
    
    // Transaction service group
    private String txServiceGroup;
    
    // DataSource proxy configuration
    private boolean enableAutoDataSourceProxy = true;
    private String dataSourceProxyMode = "AT";
    private boolean useJdkProxy = false;
    
    // Transaction scanning configuration
    private String[] scanPackages = {};
    private String[] excludesForScanning = {};
    private String[] excludesForAutoProxying = {};
    
    // Cloud integration
    private String accessKey;
    private String secretKey;
}

Saga Async Thread Pool Properties

@ConfigurationProperties(prefix = "seata.saga.state-machine.async-thread-pool")
public class SagaAsyncThreadPoolProperties {
    
    // Core thread pool size (default: 1)
    private int corePoolSize = 1;
    
    // Maximum thread pool size (default: 20)
    private int maxPoolSize = 20;
    
    // Thread keep-alive time in seconds (default: 60)
    private int keepAliveTime = 60;
}

Constants and Bean Names

// Configuration property prefixes
public interface StarterConstants {
    String SEATA_PREFIX = "seata";
    String CLIENT_PREFIX = "seata.client";
    String SAGA_PREFIX = "seata.saga";
    String HTTP_PREFIX = "seata.client.http";
    String TCC_FENCE_PREFIX = "seata.tcc.fence";
    String SAGA_STATE_MACHINE_PREFIX = "seata.saga.state-machine";
}

// Saga configuration bean names (from SeataSagaAutoConfiguration)
public static final String SAGA_DATA_SOURCE_BEAN_NAME = "seataSagaDataSource";
public static final String SAGA_ASYNC_THREAD_POOL_EXECUTOR_BEAN_NAME = "seataSagaAsyncThreadPoolExecutor";
public static final String SAGA_REJECTED_EXECUTION_HANDLER_BEAN_NAME = "seataSagaRejectedExecutionHandler";

// Auto DataSource Proxy bean name (from SeataDataSourceAutoConfiguration)
public static final String BEAN_NAME_SEATA_AUTO_DATA_SOURCE_PROXY_CREATOR = "seataAutoDataSourceProxyCreator";

// Core component bean names (from SeataAutoConfiguration)
public static final String BEAN_NAME_FAILURE_HANDLER = "failureHandler";
public static final String BEAN_NAME_SPRING_APPLICATION_CONTEXT_PROVIDER = "springApplicationContextProvider";