2012-03-03 100 views
1

範圍內的對象在春天,我有很多的代碼,使用這樣定義會話bean:春季會議在@Scheduled

@Scope(value="session", proxyMode=ScopedProxyMode.TARGET_CLASS) 
  • 在我的web應用都是很好的,因爲一個會話範圍 可用。

  • 在我的JUnit測試,所有也無妨,因爲我使用的是 WebContextTestExecutionListenerlink),對於會話範圍

  • 但註冊一個線程 範圍時@Scheduled的方法被調用時,我由於沒有 會話範圍,因此得到例外。

現在我的問題是:我如何註冊在我的@Scheduled方法用於會話範圍線程範圍是什麼?

我已經試過這樣的事情:beanFactory.registerScope("session", new SimpleThreadScope());但也重寫我的web應用:(的會話範圍

+0

計劃任務在任意線程上執行。它們與會話範圍沒有邏輯關係,所以嘗試這樣做是沒有意義的。 – skaffman 2012-03-03 22:27:20

+0

我同意計劃任務沒有邏輯會話範圍。因此,可以將計劃上下文中會話作用域的含義從http-session-scope更改爲另一種「會話」作用域,例如threadlocal或singleton。 – Cojones 2012-03-04 07:28:36

回答

0

原來,這個問題與spring 3 scheduled task running 3 times有很大關係,因爲我的ContextLoaderListener和DispatcherServlet是指向相同的上下文配置,範圍被覆蓋 @ skaffman/Wesley:謝謝你的評論。

2

計劃任務無關與sessionscope,會話可能甚至當時的計劃任務結束如果你的計劃任務需要會話中的數據,只需將包含數據的新對象傳遞給預定方法

+0

現有源對會話作用域對象有大約50多個引用。現在,我認爲手動傳入所有'會話'對象是不可接受的。 – Cojones 2012-03-04 07:24:13