關於Spring事務的一個問題

使用HttpClient 調取一個微服務的接口,返回json格式,數據量較大,我拿到數據後作格式化處理。html

調用時報出 一個超時,還有一個 JTA transaction unexpectedly rolled back,後來一步一步debug看,微服務的接口返回時要達到九秒多才返回,而我這邊沒有等到它返回數據,就直接結束事務往下執行了數據庫

由此我想到多是事務超時,json

1·因而我加大了HttpClient的超時時間,---很差使微服務

2·加大我事務的時間----也不行優化

後來想到我只是一個讀的操做,根本不須要事務,而個人項目裏面是開啓了全局事務,我不能去把全局的事務時間改了而影響到別的操做,就用了@Transactional這個註解debug

@Transactional

而這個註解裏面的參數比較多,具體用到哪個,我認爲個人這個接口只是調取數據而後作顯示,並無去操做數據庫,並不須要加入Spring的事務中,而數據庫的事務根本不涉及更無可談htm

看了這篇帖子   https://www.cnblogs.com/yepei/p/4716112.html  裏面有這麼一個描述blog

  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事務方式運行,若是當前存在事務,則把當前事務掛起。

首先我肯定不須要事務,其次個人接口裏是有事務的,可以符合我需求的,我看到只有這個,因而加在業務層接口上這一句接口

@Transactional(propagation= Propagation.NOT_SUPPORTED)

後來看到說能夠加上只讀,可是隻讀事務用於客戶代碼只讀但不修改數據的情形,只讀事務用於特定情景下的優化,我是有拿到數據作處理,因此此處不適用加只讀事務

@Transactional(propagation= Propagation.NOT_SUPPORTED,readOnly = true)

總結:

        歸根結底其實就是事務超時的緣由,其實並非一個大的Bug,只是這裏面不少小細節本身沒有留意到,記一下長個記性

相關文章
相關標籤/搜索