此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.4! |
Spring Boot 通过使用从 JNDI 检索的事务管理器来支持跨多个 XA 资源的分布式 JTA 事务。
当检测到 JTA 环境时, Spring 的用于管理事务。
自动配置的 JMS、DataSource 和 JPA bean 已升级以支持 XA 事务。
您可以使用标准的 Spring 惯用语(如 )来参与分布式事务。
如果您在 JTA 环境中,并且仍希望使用本地事务,则可以将该属性设置为以禁用 JTA 自动配置。JtaTransactionManager
@Transactional
spring.jta.enabled
false
使用 Jakarta EE Managed Transaction Manager
如果将 Spring Boot 应用程序打包为 or 文件并将其部署到 Jakarta EE 应用程序服务器,则可以使用应用程序服务器的内置事务管理器。
Spring Boot 尝试通过查看常见的 JNDI 位置(、 、 等)来自动配置事务 Management 器。
使用应用程序服务器提供的事务服务时,您通常还希望确保所有资源都由服务器管理并通过 JNDI 公开。
Spring Boot 尝试通过在 JNDI 路径( 或 )中查找 a 来自动配置 JMS,您可以使用 spring.datasource.jndi-name
属性来配置您的 .war
ear
java:comp/UserTransaction
java:comp/TransactionManager
ConnectionFactory
java:/JmsXA
java:/XAConnectionFactory
DataSource
混合 XA 和非 XA JMS 连接
使用 JTA 时,主 JMS Bean 是 XA 感知的,并参与分布式事务。
您可以注入到 bean 中,而无需使用任何:ConnectionFactory
@Qualifier
-
Java
-
Kotlin
public MyBean(ConnectionFactory connectionFactory) {
// ...
}
在某些情况下,您可能希望使用 non-XA 来处理某些 JMS 消息。
例如,您的 JMS 处理逻辑可能比 XA 超时花费的时间更长。ConnectionFactory
如果要使用非 XA ,则可以将 bean :ConnectionFactory
nonXaJmsConnectionFactory
-
Java
-
Kotlin
public MyBean(@Qualifier("nonXaJmsConnectionFactory") ConnectionFactory connectionFactory) {
// ...
}
为了保持一致性,还通过使用 bean alias 来提供 bean:jmsConnectionFactory
xaJmsConnectionFactory
-
Java
-
Kotlin
public MyBean(@Qualifier("xaJmsConnectionFactory") ConnectionFactory connectionFactory) {
// ...
}
支持嵌入式事务管理器
和 接口可用于支持嵌入式事务管理器。
这些接口负责包装 bean 并将它们公开为 regular 和 bean,它们透明地注册到分布式事务中。
DataSource 和 JMS 自动配置使用 JTA 变体,前提是您在 .XAConnectionFactoryWrapper
XADataSourceWrapper
XAConnectionFactory
XADataSource
ConnectionFactory
DataSource
JtaTransactionManager
ApplicationContext