在Spring @Service中处理大量数据

时间:2018-01-12 13:58:07

标签: java spring spring-boot

我面临着为每个请求处理大量数据的要求,我正在寻找一些线索。我提出了三个想法:

  • 1)从服务
  • 开始一个新线程
  • 2)使用服务请求范围
  • 3)使用@Async

我意识到我并不完全理解基础知识:

  • 如果所有的Spring bean都是Singletons,那么会发生什么 在@Service中耗时的操作?其他用户是否必须等待@Service完成?
  • 如果要调用DB的预期服务行为,请获取并处理结果 并做其他不重要的操作,不应该是作用域请求 默认?

    @Async与这一切有什么关系?它等同于AJAX调用吗?

我真的很感激如何对Spring Boot中的每个请求执行繁重的计算。

1 个答案:

答案 0 :(得分:1)

不,单例bean并不意味着其他线程必须等待线程完成执行该bean提供的某些服务。

我看到你提到了多达1000个请求并发计算的用户。在这种情况下,@Async可能不是一个好的选择。

您可以从一个简单的ThreadPoolExecutor开始,它具有一些适当的值,可用于最大并发线程数(16)和工作队列大小(10000)。既然你声称这是一种“开始并忘记”。动作,我认为可以在工作队列中等待一些计算请求,直到某个空闲线程可用为止。

接下来,使用启动解决方案进行一些负载测试,以再次估计您的服务功能。如果您的单个服务没有足够的能力及时处理如此大量的繁重计算请求,您需要考虑具有完成实际计算的专用工作服务实例,而您的服务器服务仅作为& #34;请求调度员"。

这不是一个真正的答案,但由于我没有足够的意义来添加答案,因此请将此视为问题的起点。