前言:生产环境使用的外部部署Tomcat还是内置Tomcat由于版本安全漏洞,往往需要升级到指定的安全版本。本文演示一下SpringBoot升级内置的Tomcat版本。
一、查看当前SpringBoot内置Tomcat版本信息.【本文SpringBoot的版本为2.3.4.RELEASE】
1、查看SpringBoot的启动项目版本.
![](https://img-blog.csdnimg.cn/20210504160907159.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hjSnNKcUpTU00=,size_16,color_FFFFFF,t_70)
spring-boot-starter-web依赖spring-boot-starter-tomcat.
![](https://img-blog.csdnimg.cn/20210504161010628.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hjSnNKcUpTU00=,size_16,color_FFFFFF,t_70)
tomcat-embed-core依赖版本信息.
![](https://img-blog.csdnimg.cn/20210504161122917.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hjSnNKcUpTU00=,size_16,color_FFFFFF,t_70)
二、查看SpringBoot内置tomcat版本的支持范围. 1、Maven的官方仓库中查看.
仓库地址
![](https://img-blog.csdnimg.cn/20210504161452193.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hjSnNKcUpTU00=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20210504162859498.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hjSnNKcUpTU00=,size_16,color_FFFFFF,t_70)
2、这里升级到9.0.45
①:9.0.45
②:添加依赖。
org.apache.tomcat.embed
tomcat-embed-core
${tomcat.version}
启动服务查看,测试项目功能
![](https://img-blog.csdnimg.cn/20210504163018831.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0hjSnNKcUpTU00=,size_16,color_FFFFFF,t_70)
三、总结说明
1、SpringBoot内置Tomcat,每个版本会有一个对应的版本范围的,根据业务以及安全需求进行升级,如果需要更高版本,直接升级SpringBoot的版本也更加合适,注意一定要多在测试环境测试项目功能,一些配置属性过期、Maven冲突等,本文适用于指定SpringBoot然后小氛围微调内置Tomcat版本。
附录
SpringBoot下Tomcat开启Nio2协议,SpringBoot支持Nio/Nio2/Http2
org.apache.coyote.http11
![](https://img-blog.csdnimg.cn/cd252dc0a7134788a8d9e97f9024a87d.png)
package com.boot.skywalk.config;
import lombok.extern.slf4j.Slf4j;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.ProtocolHandler;
import org.apache.coyote.http11.AbstractHttp11Protocol;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
/**
* 开启Tomcat下nio2配置配置
*/
@Slf4j
@Component
public class CommonTomcatConnectorCustomizer implements WebServerFactoryCustomizer {
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
((TomcatServletWebServerFactory) factory).setProtocol("org.apache.coyote.http11.Http11Nio2Protocol");
((TomcatServletWebServerFactory) factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
ProtocolHandler protocol = connector.getProtocolHandler();
log.info("Tomcat({}) -- MaxConnection:{};MaxThreads:{};MinSpareThreads:{}", //
protocol.getClass().getName(), //
((AbstractHttp11Protocol) protocol).getMaxConnections(), //
((AbstractHttp11Protocol) protocol).getMaxThreads(), //
((AbstractHttp11Protocol) protocol).getMinSpareThreads());
}
});
}
}
访问运行:协议转换为Nio2.
![](https://img-blog.csdnimg.cn/22cb61ce44754af9834fbe2627457461.png)
![](https://img-blog.csdnimg.cn/5e8c50b71af44fc08936f1518fbd4951.png)
SpringBoot多域名支持访问,本地如果做个简单测试,就在一下文件里面做个配置.
C:\Windows\System32\drivers\etc
![](https://img-blog.csdnimg.cn/ee822949c8ce45aea4dd0af61b11cd59.png)
然后修改SpringBoot下为80端口,etc中无法绑定具体端口.
server:
port: 80
![](https://img-blog.csdnimg.cn/5a2081c3764c418db210cf9e69d1a103.png)
![](https://img-blog.csdnimg.cn/44ea9fe1de1648b2aaa74bf365283c30.png)
验证SpringBoot中properties、yaml、yml的优先级,取值时读取配置文件的顺序为:properties->yaml->yml。
配置内容生效顺序:
properties > yaml > yml
加载顺序:
yml > yaml > properties
测试配置文件如下:
![](https://img-blog.csdnimg.cn/862cc845078842158368d4ea1da8d7c8.png)
![](https://img-blog.csdnimg.cn/ed13d60a61e24491bd8e028548d1ea4a.png) ![](https://img-blog.csdnimg.cn/e2fd07b9e197451ba509acb86ebf667e.png)
最终生效是properties的内容
源码层面解释:
ConfigFileApplicationListener
![](https://img-blog.csdnimg.cn/354c4718b58b41faa62197530fb2cd06.png)
从加载路径拼接出完整的配置文件然后进行加载.
默认加载外部Bean.
PropertySourceLoader接口的扩展
spring.factories的作用参考如下:
spring.factories文件的作用_着力的博客-CSDN博客_spring.factories
@Import注解作用参考如下:
Spring全解系列 - @Import注解 - 知乎
|