十四,在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. 基本介绍
-
Spring Boot 支持的 webServlet: Tomcat,Jetty,or Undertow 。
-
Spring Boot 应用启动的是 Web 应用时,web场景包-导入 tomcat
- 支持 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 的配置,有两种方式:
- 第一种方式通过 application.yaml 完成对 Tomcat 的配置
- 第二种方式:通过类来配置 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. 最后:
"在这个最后的篇章中,我要表达我对每一位读者的感激之情。你们的关注和回复是我创作的动力源泉,我从你们身上吸取了无尽的灵感与勇气。我会将你们的鼓励留在心底,继续在其他的领域奋斗。感谢你们,我们总会在某个时刻再次相遇。"