SpringBoot替换默认的tomcat服务器的方法

 更新时间:2024年08月13日 08:25:36   作者:HBLOG  
Tomcat是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP,Tomcat具有Web服务器特有的功能,在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,本文给大家介绍了Spring Boot如何替换默认的tomcat服务器,需要的朋友可以参考下

1.为什么要替换默认tomcat?

Tomcat是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP。Tomcat具有Web服务器特有的功能,包括 Tomcat管理和控制平台、安全管理和Tomcat阀等。Tomcat本身包含了HTTP服务器,因此也可以视作单独的Web服务器。在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。

Tomcat与Undertow的优劣对比

Undertow是Red Hat公司的开源产品, 它完全采用Java语言开发,是一款灵活的高性能Web服务器,支持阻塞IO和非阻塞IO。由于Undertow采用Java语言开发,可以直接嵌入到Java项目中使用。同时, Undertow完全支持Servlet和Web Socket,在高并发情况下表现非常出色。

我们在相同机器配置下压测Tomcat和Undertow,得到的测试结果如下所示:

QPS测试结果对比:

Tomcat

Undertow

通过测试发现,在高并发系统中,Tomcat相对来说比较弱。在相同的机器配置下,模拟相等的请求数,Undertow在性能和内存使用方面都是最优的。并且Undertow新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。所以,如果是高并发的业务系统,Undertow是最佳选择。

2.代码工程

实验目标

用undertow替换默认的tomcat

pom.xml

先排除tomcat,然后添加undertow依赖包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>Undertow</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>

        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
        <!--jetty-->
        <!--
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>-->
    </dependencies>
</project>

controller

package com.et.undertow.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

@RestController
public class HelloWorldController {
    @RequestMapping("/hello")
    public Map<String, Object> showHelloWorld(){
        Map<String, Object> map = new HashMap<>();
        map.put("msg", "HelloWorld");
        return map;
    }
}

DemoApplication.java

package com.et.undertow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

代码仓库

3.测试

启动Spring Boot应用,控制台日志发现已经使用undertow了

 . ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v2.2.5.RELEASE)

2024-08-12 13:40:21.429 INFO 34216 --- [ main] com.et.undertow.DemoApplication : Starting DemoApplication on BJDPLHHUAPC with PID 34216 (D:\IdeaProjects\ETFramework\Undertow\target\classes started by Dell in D:\IdeaProjects\ETFramework)
2024-08-12 13:40:21.433 INFO 34216 --- [ main] com.et.undertow.DemoApplication : No active profile set, falling back to default profiles: default
2024-08-12 13:40:22.663 WARN 34216 --- [ main] io.undertow.websockets.jsr : UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used
2024-08-12 13:40:22.684 INFO 34216 --- [ main] io.undertow.servlet : Initializing Spring embedded WebApplicationContext
2024-08-12 13:40:22.684 INFO 34216 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1196 ms
2024-08-12 13:40:22.827 INFO 34216 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2024-08-12 13:40:22.947 INFO 34216 --- [ main] io.undertow : starting server: Undertow - 2.0.29.Final
2024-08-12 13:40:22.956 INFO 34216 --- [ main] org.xnio : XNIO version 3.3.8.Final
2024-08-12 13:40:22.966 INFO 34216 --- [ main] org.xnio.nio : XNIO NIO Implementation Version 3.3.8.Final
2024-08-12 13:40:23.065 INFO 34216 --- [ main] o.s.b.w.e.u.UndertowServletWebServer : Undertow started on port(s) 8088 (http) with context path ''
2024-08-12 13:40:23.067 INFO 34216 --- [ main] com.et.undertow.DemoApplication : Started DemoApplication in 2.021 seconds (JVM running for 2.409)

到此这篇关于SpringBoot替换默认的tomcat服务器的方法的文章就介绍到这了,更多相关SpringBoot替换tomcat内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • IDEA中Maven依赖包下载不了的问题解决方案汇总

    IDEA中Maven依赖包下载不了的问题解决方案汇总

    这篇文章主要介绍了IDEA中Maven依赖包下载不了的问题解决方案汇总,文中通过图文示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • 使用Spring的拦截器监测每个Controller或方法的执行时长

    使用Spring的拦截器监测每个Controller或方法的执行时长

    这篇文章主要介绍了使用Spring的拦截器监测每个Controller或方法的执行时长,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java中生成不重复随机数的四种方法举例详解

    Java中生成不重复随机数的四种方法举例详解

    在Java编程中获取随机数是常见的需求,这篇文章主要介绍了Java中生成不重复随机数的四种方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • linux部署springBoot项目的脚本问题

    linux部署springBoot项目的脚本问题

    这篇文章主要介绍了linux部署springBoot项目的脚本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Spring Cloud Feign统一设置验证token实现方法解析

    Spring Cloud Feign统一设置验证token实现方法解析

    这篇文章主要介绍了Spring Cloud Feign统一设置验证token实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • java中添加按钮并添加响应事件的方法(推荐)

    java中添加按钮并添加响应事件的方法(推荐)

    下面小编就为大家带来一篇java中添加按钮并添加响应事件的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • SpringBoot中的跨域详解

    SpringBoot中的跨域详解

    这篇文章主要介绍了SpringBoot中的跨域详解,在浏览器上当前访问的网站,向另一个网站发送请求,用于获取数据的过程就是跨域请求,跨域是浏览器的同源策略决定的,是一个重要的浏览器安全策略,需要的朋友可以参考下
    2023-08-08
  • Spring数据访问模板化方法

    Spring数据访问模板化方法

    今天小编就为大家分享一篇关于Spring数据访问模板化,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • 简单介绍Java编程中的线程池

    简单介绍Java编程中的线程池

    这篇文章主要介绍了Java编程中的线程池,进程和线程的并发是Java编程中的重要环节,需要的朋友可以参考下
    2015-09-09
  • springboot配置mybatis和事务管理方式

    springboot配置mybatis和事务管理方式

    这篇文章主要介绍了springboot配置mybatis和事务管理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04

最新评论