Spring Boot starter for Apache Seata distributed transaction solution
npx @tessl/cli install tessl/maven-io-seata--seata-spring-boot-starter@2.0.0Spring 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.
pom.xml:<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>// 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;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());
}
}The starter provides auto-configuration for Seata distributed transaction framework through four main components:
All configurations are conditional and activated based on properties and bean presence, ensuring minimal overhead when features are not used.
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:
seata.enabled=true (default: true)@GlobalTransactional annotationsAutomatically 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:
seata.enable-auto-data-source-proxy=true (default: true)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:
seata.client.http.interceptor-enabled=true (default: true)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:
seata.enabled=true and seata.saga.enabled=trueseata.saga.state-machine.enable-async=trueseata.saga.state-machine.async-thread-pool.*// 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;
}// 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;
}// import io.seata.spring.boot.autoconfigure.properties.SpringCloudAlibabaConfiguration;
class SpringCloudAlibabaConfiguration {
// Application ID (defaults to spring.application.name)
String applicationId;
// Transaction service group
String txServiceGroup;
}// 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";
}The starter supports multiple distributed transaction modes:
The starter provides automatic failure handling through:
DefaultFailureHandlerImpl: Default implementation for transaction failuresConfigure custom failure handling by providing your own FailureHandler bean:
@Configuration
public class SeataConfig {
@Bean
@Primary
public FailureHandler customFailureHandler() {
return new CustomFailureHandlerImpl();
}
}