Case study--Spring mvc下得controller默認scope是singleton

案例還原:

在高併發調用接口傳輸局是,controller中的instance會莫名變成null值,導致存儲到數據庫中異常。

問題排查:

因爲在controller中定義了實例變量,如:

@Controller

public class controlller{

private Instance instance;

@ResponseBody
@RequestMapping(value = "/x", method = RequestMethod.POST)
public ResponseResult x() {

   instance  = new Instance();

  instance.setDate(new SimpleDateFormat());

   Dao.insert(instance)

其中有兩個問題:

1.多線程訪問下,instance是singleton因此其中的實例instance再多個線程中是共享的,這樣會出現竄數據的現象

2.當初因爲new SimpleDateFormat()不是線程安全的,因此每次用時都會new 一個新的出來,但是new SimpleDateFormat()非常的耗費資源和時間,導致了多線程下的instance訪問出問題

 

解決方案:

1.instance放到對應的函數中,變爲局部變量

2.不再new SimpleDateFormat()而變爲synchronized塊共享SimpleDateFormat


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章