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

时间:2019-04-01 23:02:43

标签: java spring-boot tomcat servlets backend

我目前正在开发一个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 个答案:

答案 0 :(得分: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/