Spring Boot starter for Seata distributed transaction solution with automatic configuration and integration capabilities
npx @tessl/cli install tessl/maven-io-seata-seata-spring-boot-starter@1.8.0Seata 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.
pom.xml:<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.8.0</version>
</dependency>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>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:8848import 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();
}
}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();
}
}Seata Spring Boot Starter provides a comprehensive auto-configuration framework built around several key components:
@GlobalTransactional annotations and manages transaction lifecycleThe starter follows Spring Boot's auto-configuration patterns, enabling zero-configuration distributed transactions while providing extensive customization options through properties.
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
);
}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
);
}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();
}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);
}// 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;
}@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;
}// 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";