背景
Springboot默认使用的内嵌容器是tomcat。实际上内嵌了Tomcat、Jetty、Undertow。

关于三者性能,参考

从这个帖子中可知,Undertow在性能上要比Tomcat、Jetty稍微好一些,在内存方面也要好一些。

所以你的项目如果没有特别要求,使用Undertow是不会有错的。

为何项目会有同时开启http和https请求?

https毋庸置疑,现在支付宝小程序、微信小程序等都必须要求服务端是https的,而且证书是正规机构颁发同时对应的域名必须备案过。

一旦我们使用了https,就表示我们的服务必须要上到服务器上,且在对应环境上都配置完了,而服务一旦是https属性的,则请求必须是对应的域名。真对我们内部调试造成了很大的不方便。

我们还是需要直接用http来请求,这样调试更方便。

思路
其实要解决上述场景,解决方式有很多,比如说:

1、应用部署到服务器的时候,配置为https模式,而在本地配置为http模式;

2、应用直接使用http模式,在部署到服务器的时候,前面增加一个负载(Nginx、云负载或者硬件负载等),负载当中配置证书支持https;

3、应用同时开启https和http两种模式,本地直接链接http调试,在服务器上连https调试;

目前我们最常用的其实是第二种方式——这个对应用来说是最简单的。

第三种方式在某些场景下也会出现该类开发需求。

本篇要介绍的,就是如何开启第三种方案。

解决方式
进入正题,这边就介绍Springboot项目在分别使用Tomcat和Undertow作为内嵌容器的时候,是如何同时开启https和http的。

解决思路无非两种:

一种是默认https,然后服务中自己再增加一个http监听;

另外一种是默认http,服务中自己再增加一个https监听。

后面一种代码上会稍微繁琐一点,既然是写应用代码,当然取更加简单的。

一、Tomcat

1、pom不用做任何改动

2、配置文件

#默认https
server.port=30004
server.ssl.key-store=classpath:aaa.com.jks
server.ssl.key-store-password=123456
server.ssl.keyStoreType=JKS
server.tomcat.max-connections=300
server.tomcat.max-threads=300
server.tomcat.connection-timeout=200
#自定义
http.port=30005

3、Java代码中自定义http监听

springboot项目中使用ChromeDriverService springboot 支持https_tomcat


这样就完成了http(端口:30005)和https(端口30004)均使用Tomcat的配置,直接启动项目即可

二、Undertow

1、pom

springboot项目中使用ChromeDriverService springboot 支持https_服务器_02


2、配置文件

#默认https
server.port=30004
server.ssl.key-store=classpath:aaa.com.jks
server.ssl.key-store-password=123456
server.ssl.keyStoreType=JKS
server.undertow.worker-threads=300
#自定义
http.port=30005

3、Java代码中自定义http监听

springboot项目中使用ChromeDriverService springboot 支持https_tomcat_03


这样就完成了http(端口:30005)和https(端口30004)均使用Undertow的配置,直接启动项目即可。

最后
Springboot的高度集成让你的应用实现需求变得越来越简单,Tomcat只需两步、Undertow只需三步即可完成一个项目同时开启http和https。

上面的tomcat和under的连接数、线程数等调优参数只是演示,如果有需要可以自行百度去查下每个参数的含义,至于说在调优的时候要怎么样调优,还是需要实际的机器来进行的

另外在国内http2的push功能,在Springboot上实现也很方便的,目前在国内的推送服务太多,暂时用的不是特别多。后面有实践场景后再来介绍。