此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.4.3spring-doc.cadn.net.cn

使用 JTA 的分布式事务

Spring Boot 通过使用从 JNDI 检索的事务管理器来支持跨多个 XA 资源的分布式 JTA 事务。spring-doc.cadn.net.cn

当检测到 JTA 环境时, Spring 的JtaTransactionManager用于管理事务。 自动配置的 JMS、DataSource 和 JPA bean 已升级以支持 XA 事务。 您可以使用标准的 Spring 惯用语,例如@Transactional参与分布式事务。 如果您在 JTA 环境中,并且仍希望使用本地事务,则可以设置spring.jta.enabledproperty 设置为false以禁用 JTA 自动配置。spring-doc.cadn.net.cn

使用 Jakarta EE Managed Transaction Manager

如果您将 Spring Boot 应用程序打包为warear文件并将其部署到 Jakarta EE 应用服务器,则可以使用应用服务器的内置事务管理器。 Spring Boot 尝试通过查看常见的 JNDI 位置(java:comp/UserTransaction,java:comp/TransactionManager等)。 使用应用程序服务器提供的事务服务时,您通常还希望确保所有资源都由服务器管理并通过 JNDI 公开。 Spring Boot 尝试通过查找ConnectionFactory在 JNDI 路径 (java:/JmsXAjava:/XAConnectionFactory),并且您可以使用spring.datasource.jndi-name财产要配置DataSource.spring-doc.cadn.net.cn

混合 XA 和非 XA JMS 连接

使用 JTA 时,主 JMSConnectionFactorybean 是 XA 感知的,并参与分布式事务。 您可以注入到 bean 中,而无需使用任何@Qualifier:spring-doc.cadn.net.cn

import jakarta.jms.ConnectionFactory;

public class MyBean {

	public MyBean(ConnectionFactory connectionFactory) {
		// ...
	}

}

In some situations, you might want to process certain JMS messages by using a non-XA ConnectionFactory. For example, your JMS processing logic might take longer than the XA timeout.spring-doc.cadn.net.cn

If you want to use a non-XA ConnectionFactory, you can the nonXaJmsConnectionFactory bean:spring-doc.cadn.net.cn

import jakarta.jms.ConnectionFactory;

import org.springframework.beans.factory.annotation.Qualifier;

public class MyBean {

	public MyBean(@Qualifier("nonXaJmsConnectionFactory") ConnectionFactory connectionFactory) {
		// ...
	}

}

For consistency, the jmsConnectionFactory bean is also provided by using the bean alias xaJmsConnectionFactory:spring-doc.cadn.net.cn

import jakarta.jms.ConnectionFactory;

import org.springframework.beans.factory.annotation.Qualifier;

public class MyBean {

	public MyBean(@Qualifier("xaJmsConnectionFactory") ConnectionFactory connectionFactory) {
		// ...
	}

}

Supporting an Embedded Transaction Manager

The XAConnectionFactoryWrapper and XADataSourceWrapper interfaces can be used to support embedded transaction managers. The interfaces are responsible for wrapping XAConnectionFactory and XADataSource beans and exposing them as regular ConnectionFactory and DataSource beans, which transparently enroll in the distributed transaction. DataSource and JMS auto-configuration use JTA variants, provided you have a JtaTransactionManager bean and appropriate XA wrapper beans registered within your ApplicationContext.spring-doc.cadn.net.cn


APP信息