正确使用Spring boot2.x内置web应用服务器

前言

在Spring boot1.x/2.x中默认内置web应用服务器都是使用是tomcat,而tomcat应用在当今微服务以及分布式应用架构下满足不了性能设置会出现瓶颈即使做了自定义但是性能依旧不尽人意,因此我们需要进行改造。

替换内置web应用服务器

由于Spring boot1.x/2.x内置默认servlet容器为Tomcat,需要使用其他内置服务器(jetty、undertow)需要进行排除, 加入需要使用的内置servlet容器:

排除tomcat依赖

	 
		org.springframework.boot
		spring-boot-starter-web
		
			
				org.springframework.boot
				spring-boot-starter-tomcat
			
 		
	

加入undertow依赖

	 
		org.springframework.boot
		spring-boot-starter-undertow
	

进行如上操作后基本让满足性能要求了

性能优化

参数设置

对于性能要求比较高的应用,可以对如下参数进行设置,在application.properties或者application.yml中进行修改设置

# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
 server.undertow.io-threads=4
 # 阻塞任务线程池, 当执行类似servlet请求阻塞操作, undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
 server.undertow.worker-threads=20
 # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
 # 每块buffer的空间大小,越小的空间被利用越充分
 server.undertow.buffer-size=1024
 # 每个区分配的buffer数量 , 所以pool的大小是buffer-size * buffers-per-region
 server.undertow.buffers-per-region=1024
 # 是否分配的直接内存
 server.undertow.direct-buffers=true

自定义设置undertow应用服务器

为了更好使用undertow服务器,利用它的XNIO流,我们可以在程序入口类进行如下设置:

   [@Bean](https://my.oschina.net/bean)
    public UndertowServletWebServerFactory servletContainer() {
        UndertowServletWebServerFactory factory = new UndertowServletWebServerFactory();
        //绑定双端口(这个配置是可选的)
        factory.addBuilderCustomizers(builder -> builder.addHttpListener(8088, "localhost"));
        //设置支持HTTP2.0协议
        factory.addBuilderCustomizers(builder -> builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true));
        return factory;
    }

关于undertow容器一些详细,请点击这里

转载于:https://my.oschina.net/VILLE/blog/3093549

你可能感兴趣的:(正确使用Spring boot2.x内置web应用服务器)