资讯专栏INFORMATION COLUMN

Spring Boot 参考指南(使用JTA分布式事务)

silenceboy / 1827人阅读

摘要:使用事务管理器是支持的一个流行的开源事务管理器实现,你可以使用启动器向项目添加适当的依赖项,与和一样,将自动配置并对进行后处理,以确保启动和关闭顺序是正确的。

37. 用JTA分布式事务

通过使用Atomikos或Bitronix嵌入式事务管理器,Spring Boot支持跨多个XA资源的分布式JTA事务,在部署到合适的Java EE应用服务器时也支持JTA事务。

当检测到JTA环境时,使用Spring的JtaTransactionManager来管理事务,自动配置的JMS、数据源和JPA bean被升级为支持XA事务,你可以使用标准的Spring风格,例如@Transactional,来参与分布式事务。如果你在JTA环境中,并且仍然希望使用本地事务,你可以设置spring.jta.enabled属性为false以禁用JTA自动配置。

37.1 使用Atomikos事务管理器

Atomikos是一种流行的开源事务管理器,可以嵌入到Spring Boot应用程序中,你可以使用spring-boot-starter-jta-atomikos启动器来拉取适当的Atomikos库,Spring Boot可以自动配置Atomikos,并确保将适当的依赖设置应用到你的Spring bean中,以实现正确的启动和关闭顺序。

默认情况下,Atomikos事务日志被写入应用程序的主目录中的transaction-logs目录(应用程序jar文件所在的目录),你可以通过在application.properties文件中设置spring.jta.log-dir来定制这个目录的位置,从spring.jta.atomikos.properties开始的属性还可以用于定制Atomikos UserTransactionServiceImp,请参阅AtomikosProperties Javadoc获取完整的详细信息。

为了确保多个事务管理器可以安全地协调相同的资源管理器,每个Atomikos实例必须配置唯一的ID,默认情况下,这个ID是Atomikos运行的机器的IP地址。为了确保生产中具有唯一性,你应该为应用程序的每个实例配置spring.jta.transaction-manager-id属性的不同值。
37.2 使用Bitronix事务管理器

Bitronix是一个流行的开源JTA事务管理器实现,你可以使用spring-boot-starter-jta-bitronix启动器向项目添加适当的Bitronix依赖项,与Atomikos一样,Spring Boot可以自动配置Bitronix并对bean进行后处理,以确保启动和关闭顺序是正确的。

默认情况下,Bitronix事务日志文件(part1.btmpart2.btm)被写入到应用程序主目录中的transaction-logs目录中,你可以通过设置spring.jta.log-dir属性来定制这个目录的位置。从spring.jta.bitronix.properties开始的属性也绑定到bitronix.tm.Configuration bean,允许进行完全定制,详细信息请参阅Bitronix文档。

37.3 使用Narayana事务管理器

Narayana是JBoss支持的一个流行的开源JTA事务管理器实现,你可以使用spring-boot-starter-jta-narayana启动器向项目添加适当的Narayana依赖项,与Atomikos和Bitronix一样,Spring Boot将自动配置Narayana并对bean进行后处理,以确保启动和关闭顺序是正确的。

默认情况下,Narayana事务日志被写到应用程序主目录中的transaction-logs目录(应用程序jar文件所在的目录),你可以在application.properties文件通过设置spring.jta.log-dir属性来定制这个目录的位置,从spring.jta.narayana.properties开始的属性也可以用来定制narayana配置,有关详细信息,请参阅NarayanaProperties Javadoc。

37.4 使用Java EE Managed事务管理器

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

37.5 混合XA和非XA JMS连接

在使用JTA时,主要的JMS ConnectionFactory bean是支持xa的,并参与分布式事务,在某些情况下,你可能希望通过使用非XA ConnectionFactory来处理某些JMS消息,例如,你的JMS处理逻辑可能需要比XA超时更长的时间。

如果希望使用非XA ConnectionFactory,可以注入nonXaJmsConnectionFactory bean而不是@Primary jmsConnectionFactory bean,为了保持一致性,jmsConnectionFactory bean也通过使用bean别名xaJmsConnectionFactory提供。

下面的示例演示如何注入ConnectionFactory实例:

// Inject the primary (XA aware) ConnectionFactory
@Autowired
private ConnectionFactory defaultConnectionFactory;

// Inject the XA aware ConnectionFactory (uses the alias and injects the same as above)
@Autowired
@Qualifier("xaJmsConnectionFactory")
private ConnectionFactory xaConnectionFactory;

// Inject the non-XA aware ConnectionFactory
@Autowired
@Qualifier("nonXaJmsConnectionFactory")
private ConnectionFactory nonXaConnectionFactory;
37.6 支持供选择的嵌入式事务管理器

可以使用XAConnectionFactoryWrapper和XADataSourceWrapper接口来支持供选择的嵌入式事务管理器,接口负责封装XAConnectionFactoryXADataSource bean,并将它们公开为常规的ConnectionFactoryDataSource bean,它们透明地注册到分布式事务中。数据源和JMS自动配置使用JTA变体,前提是你有一个JtaTransactionManager bean和在你的ApplicationContext中注册的适当的XA包装器bean。

BitronixXAConnectionFactoryWrapper和BitronixXADataSourceWrapper提供了如何编写XA包装器的好例子。

上一篇:验证&发送电子邮件 下一篇:Hazelcast

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71285.html

相关文章

  • Spring Boot 参考指南(构建系统)

    摘要:构建系统强烈建议你选择一个支持依赖管理的构建系统,并且可以使用发布到中心存储库的工件。例如,要升级到另一个,你可以将以下元素添加到你的在前面的示例中,我们指定了一个,但是任何依赖类型都可以以相同的方式被覆盖。 13. 构建系统 强烈建议你选择一个支持依赖管理的构建系统,并且可以使用发布到Maven中心存储库的工件。我们建议你选择Maven或Gradle,可以让Spring Boot与其...

    thursday 评论0 收藏0
  • Spring Boot 参考指南(Hazelcast)

    摘要:如果在类路径上并且找到了合适的配置,那么将自动配置一个可以在应用程序中注入的。如果在类路径中存在,那么首先尝试通过检查以下配置选项来创建存在的。通过属性定义的配置文件。 38. Hazelcast 如果Hazelcast在类路径上并且找到了合适的配置,那么Spring Boot将自动配置一个可以在应用程序中注入的HazelcastInstance。 如果定义了com.hazelcast...

    jindong 评论0 收藏0
  • Spring Boot 参考指南(验证&发送电子邮件)

    摘要:例如,以下服务触发第一个参数的验证,确保其大小在到之间发送电子邮件框架为使用接口发送电子邮件提供了一个简单的抽象,为它提供了自动配置以及启动模块。有关如何使用的详细说明,请参阅参考文档。 35. 验证 只要类路径上有JSR-303实现(比如Hibernate验证器),Bean validation 1.1支持的方法验证特性就会自动启用,这就让bean方法在参数和/或返回值上使用java...

    fjcgreat 评论0 收藏0
  • Spring Boot 参考指南(目录)

    摘要:参考指南使你可以轻松地创建可运行的独立的生产级的基于的应用程序,我们对平台和第三方库有自己的看法,这样你就可以以最低限度工作开始了,大多数应用程序都需要很少的配置。文档本节简要概述了参考文档,它充当文档其余部分的映射。 Spring Boot 参考指南 Spring Boot使你可以轻松地创建可运行的独立的、生产级的基于Spring的应用程序,我们对Spring平台和第三方库有自己的看...

    awesome23 评论0 收藏0
  • Spring Boot QuickStart (1)

    摘要:开始介绍简化了基于的应用开发,你只需要就能创建一个独立的,产品级别的应用。该包含很多搭建,快速运行项目所需的依赖,并提供一致的,可管理传递性的依赖集。日志级别通过标识开启控制台级别日志记录,也可以在中指定日志级别配置示例 开始 介绍 Spring Boot 简化了基于 Spring 的应用开发,你只需要 run 就能创建一个独立的,产品级别的 Spring 应用。 Spring 平台...

    klinson 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<