以编程方式增加 Spring Boot 中的线程数

Posted

技术标签:

【中文标题】以编程方式增加 Spring Boot 中的线程数【英文标题】:Increase number of threads in spring boot programatically 【发布时间】:2019-08-23 04:29:32 【问题描述】:

我目前正在开发一个 Spring Boot 应用程序,它必须同时处理尽可能多的 http 请求。这就是我想修改线程数的原因。

就我而言,我需要以编程方式进行。我现在真的不知道如何处理它,因为我是 Tomcat 和 Springboot 的新手。

这里我提供了我的主要应用程序代码,它必须在端口 80 中运行。

@SpringBootApplication
public class App 
public static void main(String[] args) 
SpringApplication.run(App.class, args);


@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer 
public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) 
configurableEmbeddedServletContainer.setPort(80);




提前致谢!

【问题讨论】:

【参考方案1】:

您使用的是哪种嵌入式服务器?您可以使用 Tomcat 中的属性server.tomcat.max-threads 来控制线程数。 0 默认为 Tomcat 使用的 200 个线程。

当你说的时候

我目前正在开发一个 Spring Boot 应用程序,它必须同时处理尽可能多的 http 请求。

您是否关心向共享资源发送过多请求时的性能成本,例如数据库?

如果您不想调整原始数字,而是希望通过和处理尽可能多的 HTTP 线程,您应该考虑在 Spring 中进行异步调用。

要在 SpringBootApplication 中启用异步调用,请执行以下操作:

@EnableSync
@SpringBootApplication
public class App 
public static void main(String[] args) 
SpringApplication.run(App.class, args);

现在您可以在服务类中使用返回 Completable<Future> 的方法了。

除此之外,您真的不应该真正处理来自 Web 服务层的线程数。它实际上应该由应用程序服务器(Tomcat、Glassfish 等)处理,它将同时处理并向您的方法发出请求。

如果您的代码中存在瓶颈,在相同的硬件上,增加线程数不会提高性能,反而有可能降低性能。

看这里:Spring MVC Rest Services - Number of Threads (Controller Instances)

参考: https://www.e4developer.com/2018/03/30/introduction-to-concurrency-in-spring-boot/ https://spring.io/guides/gs/async-method/

【讨论】:

感谢您的快速回答。问题是我不允许使用异步调用......但是有没有办法以编程方式放置 500 个线程?我的http请求的代码太短了……所以我认为没有瓶颈。

以上是关于以编程方式增加 Spring Boot 中的线程数的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 应用程序中以编程方式重新启动 HikariPool?

如果我们在Spring Boot中以编程方式配置数据源,spring boot数据源属性是否有效

Spring Boot的特性: 以编程方式设置profiles

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

Spring Boot 以编程方式设置配置文件