Spring Boot系列之修改内置Tomcat版本

Spring Boot系列之修改内置Tomcat版本1 要不要使用最新版本的 springboot 以及 tomcat 2 如何知道当前使用的 tomcat 版本 3 如何修改使用的 tomcat 版本

背景

在 spring boot 出来之前,或者没有使用 spring boot 时,Java EE 开发时如果选择 tomcat servlet,需要自己指定 tomcat 版本;此处没有考虑那种直接把打包的 war 直接扔到本地安装的任意版本的 tomcat,然后启动外置 tomcat 的情况。

使用 spring boot (内置 tomcat)时,一般情况下,完全没有必要去修改 tomcat 的版本,就算是生产环境使用的 spring boot 内置版本,也是最好使用 spring boot 的内置的 tomcat 版本,这是经过兼容测试、回归测试的版本号。

但是,很多公司都不推荐各个应用使用内置 tomcat 这种方式,因为这样的话,100 个服务,可能有几十种版本的 tomcat,不方便统一管理,太老的 tomcat 版本有问题,太新的版本不稳定。所以很多公司仍然在使用经过很多公司多年生产环境校验的 tomcat 7,甚至是 tomcat 6。随着版本的提升,依赖于 tomcat 的良好架构设计,其后续版本的各种性能提升,对于 http 2的支持,难道你真的舍得不去尝试使用吗?

不过,本地开发时,完全可以随意使用最新版本的 tomcat,如果是使用 spring boot,并且是使用内置 tomcat 的话,直接使用最新版本的 sb 即可,因为每次 sb 升级,都会升级 tomcat 版本。但是最新版本 sb 可能有不兼容等问题,有些人可能不会去尝试使用。

如果不是使用 spring boot 内置 tomcat,而是想使用任意版本的 tomcat 呢?

如何知道当前使用的版本

方法1:借助于IDEA

比如我当前的 sb 版本是:

<parent> <groupId>org.springframework.boot 
     groupId> <artifactId>spring-boot-starter-parent 
      artifactId> <version>1.5.7.RELEASE 
       version>  
        parent> 

借助于 IDE,查看 spring-boot-starter-tomcat 的 pom 文件:

<dependencies> <dependency> <groupId>org.apache.tomcat.embed 
     groupId> <artifactId>tomcat-embed-core 
      artifactId>  
       dependency> <dependency> <groupId>org.apache.tomcat.embed 
        groupId> <artifactId>tomcat-embed-el 
         artifactId>  
          dependency> <dependency> <groupId>org.apache.tomcat.embed 
           groupId> <artifactId>tomcat-embed-websocket 
            artifactId>  
             dependency>  
              dependencies> 

方法2:没有IDE, 怎么知道版本信息?

修改内置的默认版本

2018-03-15 00:46:26.275 INFO 47112 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 2018-03-15 00:46:26.282 INFO 47112 --- [ main] o.apache.catalina.core.StandardService : Starting service Tomcat 2018-03-15 00:46:26.283 INFO 47112 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.30 2018-03-15 00:46:26.333 INFO 47112 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2018-03-15 00:46:26.333 INFO 47112 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1000 ms 

但是,有时候启动会报错:

Caused by: java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory at org.apache.catalina.util.LifecycleBase. 
  
    (LifecycleBase.java:37) at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:169) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:164) at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134) ... 13 common frames omitted 
  

显然是缺少 jar 包,在 dependency 里面添加以下两者之一即可:

<dependency> <groupId>org.apache.tomcat 
     groupId> <artifactId>tomcat-juli 
      artifactId> <version>${tomcat.version} 
       version>  
        dependency> 

如果项目是使用内嵌Tomcat servlet容器形式打包部署,推荐使用下面这个,其groupId和artifactId皆是embed类型的jar包。如果项目是以war包形式打包部署,即pom标签是war,则推荐使用上面这个。

<dependency> <groupId>org.apache.tomcat.embed 
     groupId> <artifactId>tomcat-embed-logging-juli 
      artifactId> <version>${tomcat.version} 
       version>  
        dependency> 
<properties> <tomcat.version>8.0.30 
     tomcat.version>  
      properties>  
      <dependency> <groupId>org.apache.tomcat.embed 
       groupId> <artifactId>tomcat-embed-core 
        artifactId> <version>${tomcat.version} 
         version>  
          dependency> 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176852.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午8:53
下一篇 2026年3月26日 下午8:53


相关推荐

  • 信息系统项目管理师之二决策树分析

    信息系统项目管理师之二决策树分析名称 决策树分析 EMV 期望货币值 定义 迫使考虑各种可能的情况 常结合 EMV 使用适用过程 风险定量分析示例 下面以南方医院供应公司为例 看一看如何利用决策树作出合适的生产能力计划 nbsp 南方医院供应公司是一家制造医护人员的工装大褂的公司 该公司正在考虑扩大生产能力 它可以有以下几个选择 1 什么也不做 2 建一个小厂 3 建一个中型厂 4 建一个大厂 新增加的设备将生产一种

    2026年2月6日
    3
  • java集合底层实现原理_java数据存入数组

    java集合底层实现原理_java数据存入数组modCount:记录当前集合被修改的次数在所有的集合实现类中(Collection与Map中),都会有一个 modCount 的变量出现,它的作用就是记录当前集合被修改的次数。下面以ArrayList 类进行说明:添加方法:删除方法:可以看出,两个操作都会影响元素的个数。 当我们使用迭代器或 foreach 遍历时,如果你在 foreach 遍历时,自动调用迭代器的迭代方法,此时在遍历过程中调用了集合的add,remove方法时,modCount就会改变,而迭代器记录的modCount

    2022年8月8日
    11
  • 全志A33之添加电容触摸GT911驱动[通俗易懂]

    全志A33之添加电容触摸GT911驱动[通俗易懂]全志A33之添加电容触摸GT911驱动基于锐尔威视的A33开发板及提供的开发包,仅供参考。开发板说是支持GT911,其实是不支持的,得修改驱动及配置,启动文件。一.     修改配置文件/home/yygyickl/A33/dragonboard/tools/pack/chips/sun8iw5p1/configs/vstar/sys_config.fex    这是我的目录。

    2022年6月16日
    36
  • 【第二篇】Spring-Session实现Session共享Redis集群方式配置教程

    循序渐进,由易到难,这样才更有乐趣!概述本篇开始继续上一篇的内容基础上进行,本篇主要介绍Spring-Session实现配置使用Redis集群,会有两种配置方式,一种是Redis-Cluster,一种是Redis-Sentinel,并通过一个简单的demo进行实例演示!对Redis-Cluster和Redis-Sentinel不太懂,或者不知道在Windows下面如何搭建的…

    2022年2月27日
    49
  • PDB文件说明

    PDB文件说明蛋白质数据库ProteinDataBank(PDB)是一个包含蛋白质、核酸等生物大分子的结构数据的数据库,网址是http://www.rcsb.org。PDB可以经由网络免费访问,是结构生物学研究中的重要资源。为了确保PDB资料的完备与权威,各个主要的科学杂志、基金组织会要求科学家将自己的研究成果提交给PDB。PDB数据库存储结构数据的文件是PDB文件,每一个蛋白质或核酸都对应着一个编号,即P…

    2022年6月2日
    130
  • System.setProperty() 学习「建议收藏」

    System.setProperty() 学习「建议收藏」/**设置指定键对值的系统属性*setProperty(Stringprop,Stringvalue);**参数:*prop-系统属性的名称。*value-系统属性的值。**返回:*系统属性以前的值,如果没有以前的值,则返回null。**抛出:*SecurityExceptio

    2022年7月13日
    60

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号