十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明

十四,在Spring Boot当中对应" Tomcat 服务器的相关配置"和"服务器的切换"的详细说明

文章目录

  • [十四,在Spring Boot当中对应" Tomcat 服务器的相关配置"和"服务器的切换"的详细说明](#十四,在Spring Boot当中对应“ Tomcat 服务器的相关配置”和“服务器的切换”的详细说明)
  • [1. 基本介绍](#1. 基本介绍)
  • [2. 准备工作:](#2. 准备工作:)
  • [3. 内置 Tomcat 的配置](#3. 内置 Tomcat 的配置)
    • [3.1 第一种方式:通过 application.yaml 完成对 Tomcat 的配置](#3.1 第一种方式:通过 application.yaml 完成对 Tomcat 的配置)
    • [3.2 第二种方式:通过类来配置 Tomcat 服务器 / 容器](#3.2 第二种方式:通过类来配置 Tomcat 服务器 / 容器)
  • [4. 切换Spring Boot 使用的服务器(这里切换为 Undertow)](#4. 切换Spring Boot 使用的服务器(这里切换为 Undertow))
  • [5. 最后:](#5. 最后:)

1. 基本介绍

  1. Spring Boot 支持的 webServlet: Tomcat,Jetty,or Undertow 。

  2. Spring Boot 应用启动的是 Web 应用时,web场景包-导入 tomcat

  1. 支持 Tomcat (也可以是Jetty,Undertow)的配置和切换。

2. 准备工作:

在 pom.xml 文件当中编写,需要导入的相关的jar 的依赖。如下:

xml 复制代码
<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>springboot_tomcatConfig</artifactId>
    <version>1.0-SNAPSHOT</version>




    <!--    导入SpringBoot 父工程-规定写法-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
    </parent>

    <!--    导入web项目场景启动器:会自动导入和web开发相关的jar包所有依赖【库/jar】-->
    <!--    后面还会在说明spring-boot-starter-web 到底引入哪些相关依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

编写处理相关请求路径的 Controller 控制器。

java 复制代码
package com.rainbowsea.springboot.controller;


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


@RestController
// @Controller + @ResponseBody
public class testController {


    @GetMapping("/test")
    public String test() {
        return "test";
    }
}

编写测试项目的场景启动器:

java 复制代码
package com.rainbowsea.springboot;


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

@SpringBootApplication  // 表示 Spring Boot 启动场景
public class Application {

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

3. 内置 Tomcat 的配置

对应 Tomcat 的配置,有两种方式:

  1. 第一种方式通过 application.yaml 完成对 Tomcat 的配置
  2. 第二种方式:通过类来配置 Tomcat 服务器

3.1 第一种方式:通过 application.yaml 完成对 Tomcat 的配置

配置和 ServerProperties.java 关联,通过查看源码得知有哪些属性配置(注意:是在类路径下配置该 application.yaml才行)

注意:一定要在 resources(类路径下)创建 applicaitonl.yaml 才行的。

yaml 复制代码
spring:
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 50MB
server:
  # 配置端口
  port: 999
  tomcat: # 对 tomcat 的配置
    threads:
      max: 10 # 最大的工作线程,默认是 2000
      min-spare: 5 # 最小工作线程,默认是10
    accept-count: 200 # tomcat 启动的线程达到最大值,接受排队的请求个数,默认是100
    max-connections: 2000 # 最大连接数,其实就是最大并发数,也就是说,tomcat最多可以同时(根据上面的配置:最大
#    线程,启动线程的最大值)进行分发处理,2000,有10个线程,每个线程处理200个请求。的并发数
    connection-timeout: 10000 # 建立连接的超时时间,单位是毫秒

启动运行测试:

关于更多的对应 yaml 的配置,大家可以移步至:✏️✏️✏️ 七,Spring Boot 当中的 yaml 语法使用-CSDN博客

3.2 第二种方式:通过类来配置 Tomcat 服务器 / 容器

我们可以通过实现 implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> 类 ,配置 tomcat 当中的配置,但是这种配置的方式,所能配置的属性更少一些。

注意需要在类当中配置:@Component 注解到类当中,将该类需要注入到 ioc 容器当中,交给 Spring 管理起来,才有效,不然,配置的信息,Spring Boot 无法识别到,就会报错了。

java 复制代码
package com.rainbowsea.springboot.config;




import org.springframework.boot.web.embedded.jetty.ConfigurableJettyWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;

/**
 * 第二种方式:通过类来配置 Tomcat
 */

@Component
public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {

    @Override
    public void customize(ConfigurableServletWebServerFactory serverFactory) {
        serverFactory.setPort(9090); // 我们设置了 server的端口为 9090
    }
}

运行测试:这里我们将端口改为了 9090了,运行测试:

4. 切换Spring Boot 使用的服务器(这里切换为 Undertow)

我们想要切换掉Spring Boot内置的服务器(也就是Tomcat) ,就需要首先,把这个Spring Boot本身内置的Tomcat给移除出去。对于 Tomcat 的移除,移除之后,再配上,导入我们的 Undertow服务器/容器,在 pom.xml 文件上操作。

首先在 pom.xml 当中移除 Spring Boot 内置的 Tomcat 服务器,我们可以使用如下:

xml 复制代码
 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
<!--            排斥 tomcat starter-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

可能移除 tomcat 后,你的有些内容会爆红,这是正常的,因为最开始的时候引入的 tomcat 里面的依赖 jar 包,进行开发的,你只需要将,哪些是用tomcat的jar的类/内容,注释掉即可。

移除之后,导入 undertow ,注意刷新,让maven重新加载,然后运行测试。

xml 复制代码
<!--        引入 undertow 容器/服务器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
    </dependencies>

完整的 pom.xml 文件的配置 编写:

xml 复制代码
<?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">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.rainbowsea</groupId>
    <artifactId>springboot_tomcatConfig</artifactId>
    <version>1.0-SNAPSHOT</version>




    <!--    导入SpringBoot 父工程-规定写法-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
    </parent>

    <!--    导入web项目场景启动器:会自动导入和web开发相关的jar包所有依赖【库/jar】-->
    <!--    后面还会在说明spring-boot-starter-web 到底引入哪些相关依赖-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
<!--            排斥 tomcat starter-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

<!--        引入 undertow 容器/服务器-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>
    </dependencies>
</project>

运行测试:


5. 最后:

"在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。"

相关推荐
胚芽鞘68110 分钟前
查询依赖冲突工具maven Helper
java·数据库·maven
Charlie__ZS16 分钟前
若依框架去掉Redis
java·redis·mybatis
咖啡啡不加糖1 小时前
RabbitMQ 消息队列:从入门到Spring Boot实战
java·spring boot·rabbitmq
玩代码1 小时前
Java线程池原理概述
java·开发语言·线程池
NE_STOP1 小时前
SpringBoot--如何给项目添加配置属性及读取属性
java
水果里面有苹果1 小时前
20-C#构造函数--虚方法
java·前端·c#
%d%d21 小时前
python 在运行时没有加载修改后的版本
java·服务器·python
金銀銅鐵1 小时前
[Kotlin] 单例对象是如何实现的?
java·kotlin
泰勒疯狂展开1 小时前
Java研学-MongoDB(三)
java·开发语言·mongodb
zzywxc7871 小时前
AI技术通过提示词工程(Prompt Engineering)正在深度重塑职场生态和行业格局,这种变革不仅体现在效率提升,更在重构人机协作模式。
java·大数据·开发语言·人工智能·spring·重构·prompt