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

前言

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

替换内置web应用服务器

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

排除tomcat依赖

	 <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
		<exclusions>
			<exclusion>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-tomcat</artifactId>
			</exclusion>
 		</exclusions>
	</dependency>

加入undertow依赖

	 <dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-undertow</artifactId>
	</dependency>

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

性能优化

参数设置

对于性能要求比较高的应用,可以对如下参数进行设置,在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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值