溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring Boot2的JTA怎么使用

發(fā)布時(shí)間:2021-12-27 17:10:04 來源:億速云 閱讀:179 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“Spring Boot2的JTA怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spring Boot2的JTA怎么使用”吧!

使用JTA處理分布式事務(wù)

Spring Boot通過Atomkos或Bitronix的內(nèi)嵌事務(wù)管理器支持跨多個(gè)XA資源的分布式JTA事務(wù),當(dāng)部署到恰當(dāng)?shù)腏2EE應(yīng)用服務(wù)器時(shí)也會(huì)支持JTA事務(wù)。

當(dāng)發(fā)現(xiàn)JTA環(huán)境時(shí),Spring Boot將使用Spring的JtaTransactionManager來管理事務(wù)。自動(dòng)配置的JMS,DataSource和JPA beans將被升級(jí)以支持XA事務(wù)。你可以使用標(biāo)準(zhǔn)的Spring idioms,比如@Transactional,來參與到一個(gè)分布式事務(wù)中。如果處于JTA環(huán)境,但仍想使用本地事務(wù),你可以將spring.jta.enabled屬性設(shè)置為false來禁用JTA自動(dòng)配置功能。

使用Atomikos事務(wù)管理器

Atomikos是一個(gè)非常流行的開源事務(wù)管理器,并且可以嵌入到你的Spring Boot應(yīng)用中。你可以使用spring-boot-starter-jta-atomikosStarter去獲取正確的Atomikos庫。Spring Boot會(huì)自動(dòng)配置Atomikos,并將合適的depends-on應(yīng)用到你的Spring Beans上,確保它們以正確的順序啟動(dòng)和關(guān)閉。

默認(rèn)情況下,Atomikos事務(wù)日志將被記錄在應(yīng)用home目錄(你的應(yīng)用jar文件放置的目錄)下的transaction-logs文件夾中。你可以在application.properties文件中通過設(shè)置spring.jta.log-dir屬性來定義該目錄,以spring.jta.atomikos.properties開頭的屬性能用來定義Atomikos的UserTransactionServiceIml實(shí)現(xiàn),具體參考AtomikosProperties javadoc。

注意

為了確保多個(gè)事務(wù)管理器能夠安全地和相應(yīng)的資源管理器配合,每個(gè)Atomikos實(shí)例必須設(shè)置一個(gè)唯一的ID。默認(rèn)情況下,該ID是Atomikos實(shí)例運(yùn)行的機(jī)器上的IP地址。為了確保生產(chǎn)環(huán)境中該ID的唯一性,你需要為應(yīng)用的每個(gè)實(shí)例設(shè)置不同的spring.jta.transaction-manager-id屬性值。

使用Bitronix事務(wù)管理器

Bitronix是一個(gè)流行的開源JTA事務(wù)管理器實(shí)現(xiàn),你可以使用spring-boot-starter-jta-bitronixstarter為項(xiàng)目添加合適的Birtronix依賴。和Atomikos類似,Spring Boot將自動(dòng)配置Bitronix,并對(duì)beans進(jìn)行后處理(post-process)以確保它們以正確的順序啟動(dòng)和關(guān)閉。

默認(rèn)情況下,Bitronix事務(wù)日志(part1.btm和part2.btm)將被記錄到應(yīng)用home目錄下的transaction-logs文件夾中,你可以通過設(shè)置spring.jta.log-dir屬性來自定義該目錄。以spring.jta.bitronix.properties開頭的屬性將被綁定到bitronix.tm.Configuration bean,你可以通過這完成進(jìn)一步的自定義,具體參考Bitronix文檔。

注意

為了確保多個(gè)事務(wù)管理器能夠安全地和相應(yīng)的資源管理器配合,每個(gè)Bitronix實(shí)例必須設(shè)置一個(gè)唯一的ID。默認(rèn)情況下,該ID是Bitronix實(shí)例運(yùn)行的機(jī)器上的IP地址。為了確保生產(chǎn)環(huán)境中該ID的唯一性,你需要為應(yīng)用的每個(gè)實(shí)例設(shè)置不同的spring.jta.transaction-manager-id屬性值。

使用Narayana事務(wù)管理器

Narayana是一個(gè)流行的開源JTA事務(wù)管理器實(shí)現(xiàn),目前只有JBoss支持。你可以使用spring-boot-starter-jta-narayana starter添加合適的Narayana依賴,像Atomikos和Bitronix那樣,Spring Boot將自動(dòng)配置Narayana,并對(duì)你的beans后處理(post-process)以確保正確啟動(dòng)和關(guān)閉。

Narayana事務(wù)日志默認(rèn)記錄到應(yīng)用home目錄(放置應(yīng)用jar的目錄)的transaction-logs目錄下,你可以通過設(shè)置application.properties中的spring.jta.log-dir屬性自定義該目錄。以spring.jta.narayana.properties開頭的屬性可用于自定義Narayana配置,具體參考NarayanaProperties。

注意

為了確保多事務(wù)管理器能夠安全配合相應(yīng)資源管理器,每個(gè)Narayana實(shí)例必須配置唯一的ID,默認(rèn)ID設(shè)為1。為確保生產(chǎn)環(huán)境中ID唯一性,你可以為應(yīng)用的每個(gè)實(shí)例配置不同的spring.jta.transaction-manager-id屬性值。

使用J2EE管理的事務(wù)管理器

如果你將Spring Boot應(yīng)用打包為一個(gè)war或ear文件,并將它部署到一個(gè)J2EE的應(yīng)用服務(wù)器中,那你就能使用應(yīng)用服務(wù)器內(nèi)建的事務(wù)管理器。Spring Boot將嘗試通過查找常見的JNDI路徑(java:comp/UserTransaction, java:comp/TransactionManager等)來自動(dòng)配置一個(gè)事務(wù)管理器。如果使用應(yīng)用服務(wù)器提供的事務(wù)服務(wù),你通常需要確保所有的資源都被應(yīng)用服務(wù)器管理,并通過JNDI暴露出去。Spring Boot通過查找JNDI路徑j(luò)ava:/JmsXA或java:/XAConnectionFactory獲取一個(gè)ConnectionFactory來自動(dòng)配置JMS,并且你可以使用spring.datasource.jndi-name屬性配置你的DataSource。

混合XA和non-XA的JMS連接

當(dāng)使用JTA時(shí),primary JMS ConnectionFactorybean將能識(shí)別XA,并參與到分布式事務(wù)中。有些情況下,你可能需要使用non-XA的ConnectionFactory去處理一些JMS消息。例如,你的JMS處理邏輯可能比XA超時(shí)時(shí)間長(zhǎng)。

如果想使用一個(gè)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;

支持可替代的內(nèi)嵌事務(wù)管理器

XAConnectionFactoryWrapper和XADataSourceWrapper接口用于支持可替換的內(nèi)嵌事務(wù)管理器。該接口用于包裝XAConnectionFactory和XADataSource beans,并將它們暴露為普通的ConnectionFactory和DataSource beans,這樣在分布式事務(wù)中可以透明使用。Spring Boot將使用注冊(cè)到ApplicationContext的合適的XA包裝器及JtaTransactionManager bean自動(dòng)配置你的DataSource和JMS。

BitronixXAConnectionFactoryWrapper和BitronixXADataSourceWrapper提供很好的示例用于演示怎么編寫XA包裝器。

感謝各位的閱讀,以上就是“Spring Boot2的JTA怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Spring Boot2的JTA怎么使用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI