2016-07-16 46 views
0

我有2個豆與@Scope(值= WebApplicationContext.SCOPE_APPLICATION,proxyMode = ScopedProxyMode.TARGET_CLASS)如何在Spring上重新創建Singleton bean(如果Singleton崩潰)?

這2個bean是單身人士。有時它們會根據併發請求的數量而崩潰。如果他們崩潰了,我確認他們有一個空值,我如何重新創建它們並刷新上下文?或者它會很危險,緩慢並容易出現進一步的錯誤?

此外,什麼是創建一個單身的最好方法,使它更穩定?通過工廠?

我有我的豆RootContextConfiguration類中聲明如下:

@Scope(value = WebApplicationContext.SCOPE_APPLICATION, proxyMode = ScopedProxyMode.TARGET_CLASS) 
public MyFinderModels myFinderModels() { 
    MyFinderModels myFinderModels = new MyFinderModels(); 
    return myFinderModels; 
} 
這是對我的RootContextConfiguration類中聲明

@Configuration 
@EnableScheduling 
@EnableLoadTimeWeaving 
@EnableAsync(
    mode = AdviceMode.PROXY, proxyTargetClass = true, 
    order = 1 
) 
@ComponentScan(basePackages = {"com.mydomain.api.service","com.mydomain.api.repositories"}, excludeFilters = @ComponentScan.Filter({ 
    Controller.class, ControllerAdvice.class })) 
@ImportResource({ "classpath:com/mydomain/config/securityConfiguration.xml" }) 
public class RootContextConfiguration implements AsyncConfigurer, 
    SchedulingConfigurer { ..... 

如果Bean MyFinderModels崩潰,它將變爲null。因此,在這種情況下最好的辦法是什麼?在ApplicationContext級別重新創建它,還是應該有一個更好的工廠來初始化bean並在發生崩潰時處理它以便恢復它?

它不會每次都崩潰,但是當它需要重新啓動我的容器時。

我正在使用Spring版本4.2.3.RELEASE。

謝謝

C.

+3

一個bean崩潰意味着什麼? – MeBigFatGuy

+0

春豆本身不會崩潰。因此,如果您有任何問題,請將代碼顯示在發生問題的位置(即,您的bean將爲空的位置)。 – dunni

回答

0

我不知道很多關於Spring或豆,但我不知道你所說的單身豆「崩潰」的意思。也許你的意思是應用程序容器崩潰了,因此你的整個服務器都會崩潰,這會讓你失去任何非持久對象狀態。如果這就是你的意思,那麼你應該以某種方式保存你的bean的狀態並在之後重新加載它,並且還要研究導致你的服務器/應用程序服務器崩潰的問題。

如果你的意思是別的,那麼我會說你的單例bean引用剛剛被空值覆蓋,而不是「崩潰」。這可能是一個錯誤。

從我對bean的理解和閱讀Spring,如果你沒有指定範圍(因爲你沒有),它將是Singleton作用域。這意味着Spring框架將只創建一個bean實例。我想你不應該自己實例化這個類,所以你不應該需要myFinderModels()方法。您可能正在使用此方法來替換對原始bean的引用。

所以,回答你的問題:我認爲你不應該擔心創建和更少重新創建你的單身人士。關注如何讓你的bean配置正確,並找出你可能在哪裏搞亂它的引用並修復它。

相關問題