SpringBoot修改内置tomcat版本

本文介绍了如何查看并升级SpringBoot内置的Tomcat版本,详细步骤包括检查当前版本、指定新版本以及测试功能。此外,还展示了如何开启Nio2协议,并提供了配置多域名访问的提示。最后,讨论了不同配置文件的加载顺序及其影响。

前言:生产环境使用的外部部署Tomcat还是内置Tomcat由于版本安全漏洞,往往需要升级到指定的安全版本。本文演示一下SpringBoot升级内置的Tomcat版本。

一、查看当前SpringBoot内置Tomcat版本信息.【本文SpringBoot的版本为2.3.4.RELEASE】

        1、查看SpringBoot的启动项目版本.

spring-boot-starter-web依赖spring-boot-starter-tomcat.

tomcat-embed-core依赖版本信息.

二、查看SpringBoot内置tomcat版本的支持范围.
    1、Maven的官方仓库中查看.

     仓库地址

     2、这里升级到9.0.45

    ①:<tomcat.version>9.0.45</tomcat.version>

    ②:添加依赖。

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${tomcat.version}</version>
        </dependency>

 启动服务查看,测试项目功能

三、总结说明

     1、SpringBoot内置Tomcat,每个版本会有一个对应的版本范围的,根据业务以及安全需求进行升级,如果需要更高版本,直接升级SpringBoot的版本也更加合适,注意一定要多在测试环境测试项目功能,一些配置属性过期、Maven冲突等,本文适用于指定SpringBoot然后小氛围微调内置Tomcat版本。

附录

SpringBoot下Tomcat开启Nio2协议,SpringBoot支持Nio/Nio2/Http2

org.apache.coyote.http11

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<ConfigurableServletWebServerFactory> {
    @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.

 SpringBoot多域名支持访问,本地如果做个简单测试,就在一下文件里面做个配置.

C:\Windows\System32\drivers\etc

 然后修改SpringBoot下为80端口,etc中无法绑定具体端口.

server:
  port: 80

验证SpringBoot中properties、yaml、yml的优先级,取值时读取配置文件的顺序为:properties->yaml->yml。

配置内容生效顺序:

properties > yaml > yml

 加载顺序:

yml > yaml > properties 

测试配置文件如下: 

最终生效是properties的内容

 源码层面解释:

ConfigFileApplicationListener

从加载路径拼接出完整的配置文件然后进行加载.

默认加载外部Bean. 

 PropertySourceLoader接口的扩展

spring.factories的作用参考如下:

spring.factories文件的作用_着力的博客-优快云博客_spring.factories

@Import注解作用参考如下:

Spring全解系列 - @Import注解 - 知乎​​​​​​​

<think>嗯,用户想在Spring Boot修改内置Tomcat服务器的版本,用Maven的pom.xml配置。首先,我得回忆一下Spring Boot管理依赖的方式。记得Spring Boot的父项目spring-boot-starter-parent会默认管理很多依赖的版本,包括Tomcat。所以如果用户想改版本,可能需要覆盖默认的版本号。 那具体应该怎么做呢?通常,Maven中可以通过属性来覆盖版本。例如,在pom.xml的properties部分定义tomcat.version属性。比如<tomcat.version>9.0.75</tomcat.version>。这样Maven会优先使用用户指定的版本而不是父项目中的默认值。 不过,需要注意Tomcat版本Spring Boot版本的兼容性。用户可能需要查阅Spring Boot官方文档,确认他们使用的Spring Boot版本支持哪个Tomcat版本。否则可能会有兼容性问题。 另外,用户是否可能排除了默认的Tomcat依赖,然后手动引入指定版本?比如,如果用户使用了其他的嵌入式容器,比如Jetty,可能需要排除Tomcat然后添加Jetty依赖。但这里用户只是要改Tomcat版本,所以应该不需要排除,直接覆盖版本号就可以了。 还有,检查依赖是否真的生效。可以用mvn dependency:tree命令查看Tomcat依赖的版本是否正确。如果发现版本没变,可能是属性名写错了,或者有其他地方的配置覆盖了。 另外,如果用户的项目没有继承spring-boot-starter-parent,而是用了dependencyManagement,可能需要用不同的方式指定版本。比如在dependencyManagement里导入spring-boot-dependencies,然后同样用属性覆盖。 总结步骤应该是:1. 在pom.xml的properties里添加tomcat.version属性;2. 确认依赖生效;3. 处理可能的兼容性问题。 然后生成相关问题的时候,可以考虑其他嵌入式服务器,比如Jetty或Undertow的配置方法,或者如何排除Tomcat,或者多模块项目中如何处理,还有如何检查依赖树。这些都是用户可能进一步想了解的内容。</think>在Spring Boot修改内置Tomcat版本的配置方法如下: ### 步骤说明 1. **定位Tomcat依赖关系** Spring Boot通过`spring-boot-starter-web`默认引入Tomcat依赖,其版本由父工程`spring-boot-starter-parent`统一管理[^2]。 2. **覆盖默认版本** 在`pom.xml`的`<properties>`标签内添加`<tomcat.version>`属性: ```xml <properties> <tomcat.version>9.0.75</tomcat.version> <!-- 示例版本 --> </properties> ``` 这会覆盖父工程中定义的Tomcat版本[^4]。 3. **验证依赖生效** 执行`mvn dependency:tree`命令,检查输出中`org.apache.tomcat.embed`的版本是否已更新。 ### 完整配置示例 ```xml <project> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.8</version> <!-- 确保与Tomcat版本兼容 --> </parent> <properties> <tomcat.version>9.0.75</tomcat.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> </project> ``` ### 注意事项 - 必须确保Tomcat版本Spring Boot版本兼容,具体对应关系可参考[Spring官方文档](https://spring.io/projects/spring-boot#support) - 若项目未继承`spring-boot-starter-parent`,需在`dependencyManagement`中显式定义Tomcat版本[^3]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道之简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值