使用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
首先我肯定不須要事務,其次個人接口裏是有事務的,可以符合我需求的,我看到只有這個,因而加在業務層接口上這一句接口
@Transactional(propagation= Propagation.NOT_SUPPORTED)
後來看到說能夠加上只讀,可是隻讀事務用於客戶代碼只讀但不修改數據的情形,只讀事務用於特定情景下的優化,我是有拿到數據作處理,因此此處不適用加只讀事務
@Transactional(propagation= Propagation.NOT_SUPPORTED,readOnly = true)
總結:
歸根結底其實就是事務超時的緣由,其實並非一個大的Bug,只是這裏面不少小細節本身沒有留意到,記一下長個記性