温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot2的JTA怎么使用

发布时间:2021-12-27 17:10:04 来源:亿速云 阅读:182 作者:iii 栏目:大数据

这篇文章主要讲解了“Spring Boot2的JTA怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spring Boot2的JTA怎么使用”吧!

使用JTA处理分布式事务

Spring Boot通过Atomkos或Bitronix的内嵌事务管理器支持跨多个XA资源的分布式JTA事务,当部署到恰当的J2EE应用服务器时也会支持JTA事务。

当发现JTA环境时,Spring Boot将使用Spring的JtaTransactionManager来管理事务。自动配置的JMS,DataSource和JPA beans将被升级以支持XA事务。你可以使用标准的Spring idioms,比如@Transactional,来参与到一个分布式事务中。如果处于JTA环境,但仍想使用本地事务,你可以将spring.jta.enabled属性设置为false来禁用JTA自动配置功能。

使用Atomikos事务管理器

Atomikos是一个非常流行的开源事务管理器,并且可以嵌入到你的Spring Boot应用中。你可以使用spring-boot-starter-jta-atomikosStarter去获取正确的Atomikos库。Spring Boot会自动配置Atomikos,并将合适的depends-on应用到你的Spring Beans上,确保它们以正确的顺序启动和关闭。

默认情况下,Atomikos事务日志将被记录在应用home目录(你的应用jar文件放置的目录)下的transaction-logs文件夹中。你可以在application.properties文件中通过设置spring.jta.log-dir属性来定义该目录,以spring.jta.atomikos.properties开头的属性能用来定义Atomikos的UserTransactionServiceIml实现,具体参考AtomikosProperties javadoc。

注意

为了确保多个事务管理器能够安全地和相应的资源管理器配合,每个Atomikos实例必须设置一个唯一的ID。默认情况下,该ID是Atomikos实例运行的机器上的IP地址。为了确保生产环境中该ID的唯一性,你需要为应用的每个实例设置不同的spring.jta.transaction-manager-id属性值。

使用Bitronix事务管理器

Bitronix是一个流行的开源JTA事务管理器实现,你可以使用spring-boot-starter-jta-bitronixstarter为项目添加合适的Birtronix依赖。和Atomikos类似,Spring Boot将自动配置Bitronix,并对beans进行后处理(post-process)以确保它们以正确的顺序启动和关闭。

默认情况下,Bitronix事务日志(part1.btm和part2.btm)将被记录到应用home目录下的transaction-logs文件夹中,你可以通过设置spring.jta.log-dir属性来自定义该目录。以spring.jta.bitronix.properties开头的属性将被绑定到bitronix.tm.Configuration bean,你可以通过这完成进一步的自定义,具体参考Bitronix文档。

注意

为了确保多个事务管理器能够安全地和相应的资源管理器配合,每个Bitronix实例必须设置一个唯一的ID。默认情况下,该ID是Bitronix实例运行的机器上的IP地址。为了确保生产环境中该ID的唯一性,你需要为应用的每个实例设置不同的spring.jta.transaction-manager-id属性值。

使用Narayana事务管理器

Narayana是一个流行的开源JTA事务管理器实现,目前只有JBoss支持。你可以使用spring-boot-starter-jta-narayana starter添加合适的Narayana依赖,像Atomikos和Bitronix那样,Spring Boot将自动配置Narayana,并对你的beans后处理(post-process)以确保正确启动和关闭。

Narayana事务日志默认记录到应用home目录(放置应用jar的目录)的transaction-logs目录下,你可以通过设置application.properties中的spring.jta.log-dir属性自定义该目录。以spring.jta.narayana.properties开头的属性可用于自定义Narayana配置,具体参考NarayanaProperties。

注意

为了确保多事务管理器能够安全配合相应资源管理器,每个Narayana实例必须配置唯一的ID,默认ID设为1。为确保生产环境中ID唯一性,你可以为应用的每个实例配置不同的spring.jta.transaction-manager-id属性值。

使用J2EE管理的事务管理器

如果你将Spring Boot应用打包为一个war或ear文件,并将它部署到一个J2EE的应用服务器中,那你就能使用应用服务器内建的事务管理器。Spring Boot将尝试通过查找常见的JNDI路径(java:comp/UserTransaction, java:comp/TransactionManager等)来自动配置一个事务管理器。如果使用应用服务器提供的事务服务,你通常需要确保所有的资源都被应用服务器管理,并通过JNDI暴露出去。Spring Boot通过查找JNDI路径java:/JmsXA或java:/XAConnectionFactory获取一个ConnectionFactory来自动配置JMS,并且你可以使用spring.datasource.jndi-name属性配置你的DataSource。

混合XA和non-XA的JMS连接

当使用JTA时,primary JMS ConnectionFactorybean将能识别XA,并参与到分布式事务中。有些情况下,你可能需要使用non-XA的ConnectionFactory去处理一些JMS消息。例如,你的JMS处理逻辑可能比XA超时时间长。

如果想使用一个non-XA的ConnectionFactory,你可以注入nonXaJmsConnectionFactory bean而不是@Primary jmsConnectionFactory bean。为了保持一致,jmsConnectionFactory bean将以别名xaJmsConnectionFactor来被使用。

示例如下:

 1// Inject the primary (XA aware) ConnectionFactory
2@Autowired
3private ConnectionFactory defaultConnectionFactory;
4// Inject the XA aware ConnectionFactory (uses the alias and injects the same as above)
5@Autowired
6@Qualifier("xaJmsConnectionFactory")
7private ConnectionFactory xaConnectionFactory;
8// Inject the non-XA aware ConnectionFactory
9@Autowired
10@Qualifier("nonXaJmsConnectionFactory")
11private ConnectionFactory nonXaConnectionFactory;

支持可替代的内嵌事务管理器

XAConnectionFactoryWrapper和XADataSourceWrapper接口用于支持可替换的内嵌事务管理器。该接口用于包装XAConnectionFactory和XADataSource beans,并将它们暴露为普通的ConnectionFactory和DataSource beans,这样在分布式事务中可以透明使用。Spring Boot将使用注册到ApplicationContext的合适的XA包装器及JtaTransactionManager bean自动配置你的DataSource和JMS。

BitronixXAConnectionFactoryWrapper和BitronixXADataSourceWrapper提供很好的示例用于演示怎么编写XA包装器。

感谢各位的阅读,以上就是“Spring Boot2的JTA怎么使用”的内容了,经过本文的学习后,相信大家对Spring Boot2的JTA怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI