如何管理范围和内存加载重豆?

时间:2014-08-01 15:52:56

标签: java spring spring-mvc

看起来我有一个很大的问题让我对如何解决它感到很困惑。

我正在使用Spring的4.0.3.RELEASE并创建了一个MVC rest应用程序。大多数配置是通过Java配置完成的,类似于WebMVCConfig,它扩展了WebMvcConfigurerAdapter。

我有一个spring bean,它加载了一个文本挖掘系统,它有一些重型列表。在一个独立的应用程序中,我只需加载一次,我需要处理一些文本,我只需要调用进程句方法。它的构造函数一次加载所有列表,之后只是调用该函数的问题。过程函数有时需要大约10秒,但有时需要几毫秒才能运行,这取决于数据。

现在,将它放在Spring MVC应用程序上很有意思。如果我将范围设置为该bean的会话范围:@Scope(value = WebApplicationContext.SCOPE_SESSION,proxyMode = ScopedProxyMode.TARGET_CLASS)它工作得很好,当然需要一些时间来加载我的休息应用程序。

但是,最终它会耗尽内存,因为会话永远不会被杀死。

如果我按要求这样做,那将是同样的问题。

如果我这样做,那么默认应用程序范围比我对该bean的并发用法有问题。一个用户运行良好,另一个用户崩溃。

我不知道该怎么做。虽然会话范围似乎是正确的答案,因为每次调用都会保留状态。不仅Bean很重,但有时可能需要10秒才能进行分析。

我有一个Java Configuration类,我通过@Inject批注将该bean注入我的Service Implementation类。想知道正确的是@Autowire。

基本上我的数据挖掘Bean通过@Inject注入到我的服务bean中。我已经将2个bean分配为会话bean。

不知道我是否应该将数据挖掘Bean分配为会话,将服务bean分配为应用程序以及用于连接Datamining bean的方法。我是否使用@Autowire注释或其他东西来避免我遇到的问题。

另外,ScopedProxyMode怎么样?在这种情况下应该使用哪一个?

这种情况同样是一种重豆,处理时间很慢(10秒)。

谢谢,

0 个答案:

没有答案