0%

实践-spring-boot替换内置tomcat版本

本章只是回顾一次eureka版本升级后tomcat资源占用过高的问题,临时解决。

升级springBoot、SpringCloud版本

  • 升级完成后直接在测试环境测试部署,结果发现eureka的cpu资源占用过高,导致假死。通过arthas发现是tomcat线程阻塞。通过dependepency看了下springboot中内嵌tomcat的版本是9了。之前是8,测试环境一大堆人等着测试接口。首先想着降低tomcat版本。
1
2
3
查看依赖
gradle dependencies
mvn dependency:tree > output.txt # 输出到文件里

排除SpringBoot的Tomcat,指定Tomcat版本

有时候我们需要在特定情况下使用特定的Tomcat版本,这时候总不能因为Tomcat就改变SpringBoot的版本,所以可以采用排除SpringBoot中的Tomcat包,然后手动指定Tomcat的版本,当然还要引入Tomcat相关的包。

Gradle的配置
1
2
3
4
5
6
7
compile('org.springframework.boot:spring-boot-starter-web') {
exclude module: "spring-boot-starter-tomcat"
}
compile 'org.apache.tomcat.embed:tomcat-embed-core:8.5.37'
compile 'org.apache.tomcat.embed:tomcat-embed-el:8.5.37'
compile 'org.apache.tomcat.embed:tomcat-embed-logging-juli:8.5.2'
compile 'org.apache.tomcat.embed:tomcat-embed-websocket:8.5.37'

如果不指定版本,则会使用最新的Tomcat版本, 否则直接指定对应的版本号。

Maven的配置
  1. 在 pom.xml文件里面添加一个标签,添加期望的版本。
1
<tomcat.version>8.5.37</tomcat.version>
  1. 添加必要的Jar包:
1
2
3
4
5
6
7
8
9
10
<dependency> 
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-logging-juli</artifactId>
<version>${tomcat.version}</version>
</dependency>

重新部署eureka后一切正常。处理时间短暂,没有影响大家工作。时间过了大半年了,也忘记具体是啥原因了。有机会本地复现试试。