多資料來源支援遇見的乙個小問題

2021-09-29 23:06:31 字數 631 閱讀 9133

描述:

在專案中使用到多資料來源,因此使用了threadlocal記錄了當前執行緒持有的sqlsession鏈結。並且自定義了註解datasource,用於aop,在service層做切面,在方法執行之前,更改資料來源到另乙個庫,然後方法執行完後,刪掉當前執行緒在threadlocal中的值,鞏固一下,threadlocal內部是乙個hashmap,key為thread.currentthread()。

問題:在方法a呼叫方法b的時候,如果a和b都用了註解,宣告需要更改資料來源,則在方法b執行完之後,到a執行完之前的**,dao層總是空指標。

分析:aop在每次方法執行前後,都修改資料來源,方法前set(),方法後remove,但是當a調b的時候,如果b執行完後,將threadlocal.remove(),那麼會將map.entry(),都刪除,導致後邊拿不到資料來源,因此出現空指標。

解法:將threadlocal改為threadlocal>,也就是維護乙個棧,方法呼叫之前,入棧,設定資料來源到a,方法執行完,將a刪除,這樣如果a調b,那麼當進入b之前棧中值:a,進入b之前:ab,離開b之後:a,離開a之後:null,這樣就不會出現問題了。

模型:

GIS資料來源的乙個關鍵問題

blog.csdn.net clever101 gis資料來源的乙個關鍵問題是 gis資料的獲取問題。從傳統來看,gis資料的獲取主要依靠以下途徑 1.測量儀器的實地測量獲取 2.傳統地圖掃瞄後進行人工向量化 3.遙感資料的目標識別獲取 這幾種途徑均存在嚴重缺點 測量儀器的實地測量雖然資料準確度和精...

GIS資料來源的乙個關鍵問題

gis 資料來源的乙個關鍵問題是 gis 資料的獲取問題。從傳統來看,gis 資料的獲取主要依靠以下途徑 1.測量儀器的實地測量獲取 2.傳統地圖掃瞄後進行人工向量化 3.遙感資料的目標識別獲取 這幾種途徑均存在嚴重缺點 測量儀器的實地測量雖然資料準確度和精確度較高,但工作量巨大,獲取資料量少 傳統...

GIS資料來源的乙個關鍵問題

gis 資料來源的乙個關鍵問題是 gis 資料的獲取問題。從傳統來看,gis 資料的獲取主要依靠以下途徑 1.測量儀器的實地測量獲取 2.傳統地圖掃瞄後進行人工向量化 3.遙感資料的目標識別獲取 這幾種途徑均存在嚴重缺點 測量儀器的實地測量雖然資料準確度和精確度較高,但工作量巨大,獲取資料量少 傳統...