目录
一、Tomcat集成
1、依赖层级
2、自动化配置
二、Tomcat架构
三、Tomcat配置
1、基础配置
2、属性配置类
3、配置加载分析
四、周期管理方法
1、控制类
2、核心方法
首页 Java java教程 SpringBoot集成Tomcat服务架构怎么配置

SpringBoot集成Tomcat服务架构怎么配置

May 11, 2023 pm 01:46 PM
tomcat springboot

一、Tomcat集成

使用的成本越低,内部封装越复杂

1、依赖层级

在SpringBoot框架的web依赖包中,引入的是内嵌Tomcat组件,基于SpringBoot的版本,Tomcat集成的是9.0版本;

<!-- 1、项目工程依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.2.5.RELEASE</version>
</dependency>
<!-- 2、starter-web依赖 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <version>2.2.5.RELEASE</version>
  <scope>compile</scope>
</dependency>
<!-- 3、starter-tomcat依赖 -->
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <version>9.0.31</version>
  <scope>compile</scope>
</dependency>
登录后复制

2、自动化配置

在SpringBoot框架的自动配置类中,Web项目中不显式更换其他服务依赖时,默认提供了对Tomcat服务的管理;

@ConditionalOnWebApplication(type = Type.SERVLET)
@EnableConfigurationProperties(ServerProperties.class)
@Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class,
		ServletWebServerFactoryConfiguration.EmbeddedTomcat.class})
public class ServletWebServerFactoryAutoConfiguration {
	@Bean
	@ConditionalOnClass(name = "org.apache.catalina.startup.Tomcat")
	public TomcatServletWebServerFactoryCustomizer tomcatServletWebServerFactoryCustomizer(
			ServerProperties serverProperties) {
		return new TomcatServletWebServerFactoryCustomizer(serverProperties);
	}
}
登录后复制

二、Tomcat架构

SpringBoot集成Tomcat服务架构怎么配置

Server:代表整个Tomcat容器;

Service:服务器内部的中间组件,将一个或多个Connector绑定到一个Engine上;

Engine:表示特定服务的请求处理管道,接收Connector的请求并响应;

Host:网络主机名称;

Connector:连接器处理与客户端的通信;

Context:代表一个Web应用程序的上下文;

参考Tomcat9.0版本的核心组件描述,对于框架有大致的了解后,再去分析集成原理,会更容易把握主线逻辑;

三、Tomcat配置

1、基础配置

在配置文件中,对Tomcat做一些基础性的设置,查看下面的配置类可以知道,这些属性存在默认值;

server:
  port: 8082                # 端口号
  tomcat:                   # Tomcat组件
    uri-encoding: UTF-8     # URI编码
    max-threads: 100        # 最大工作线程
    min-spare-threads: 10   # 最小工作线程
登录后复制

2、属性配置类

在服务配置中,提供多种服务器的适配,像Tomcat、Jetty、Netty、Undertow,从策略上看,配置分为公共属性以及各种服务器的适配属性;

更多配置信息,可以参考完整的源码和注释说明;

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties {
    private Integer port;
    public static class Tomcat {
        private Charset uriEncoding = StandardCharsets.UTF_8;
        private int maxThreads = 200;
        private int minSpareThreads = 10;
    }
}
登录后复制

3、配置加载分析

SpringBoot集成Tomcat服务架构怎么配置

  • 基于配置的属性,定制化管理Tomcat服务的信息;

public class TomcatWebServerFactoryCustomizer
        implements WebServerFactoryCustomizer&lt;ConfigurableTomcatWebServerFactory&gt; {
    @Override
    public void customize(ConfigurableTomcatWebServerFactory factory) {
        ServerProperties properties = this.serverProperties;
        ServerProperties.Tomcat tomcatProperties = properties.getTomcat();
        PropertyMapper propertyMapper = PropertyMapper.get();
        customizeStaticResources(factory);
    }
}
登录后复制
  • TomcatWeb服务工厂,这里在创建WebServer时,使用的是Tomcat,需要适当的了解一下Tomcat架构;

public class TomcatServletWebServerFactory extends AbstractServletWebServerFactory
        implements ConfigurableTomcatWebServerFactory, ResourceLoaderAware {
    @Override
    public WebServer getWebServer(ServletContextInitializer... initializers) {
        Tomcat tomcat = new Tomcat();
        Connector connector = new Connector(this.protocol);
        connector.setThrowOnFailure(true);
        tomcat.getService().addConnector(connector);
        customizeConnector(connector);
        tomcat.setConnector(connector);
        tomcat.getHost().setAutoDeploy(false);
        configureEngine(tomcat.getEngine());
        prepareContext(tomcat.getHost(), initializers);
        return getTomcatWebServer(tomcat);
    }
}
登录后复制

四、周期管理方法

1、控制类

SpringBoot集成Tomcat服务架构怎么配置

  • WebServer的简单接口,只声明端口获取,服务启动和停止相关方法;

public interface WebServer {
	// 获取监听的端口
	int getPort();
	// 服务启动
	void start() throws WebServerException;
	// 服务停止
	void stop() throws WebServerException;
}
登录后复制
  • SpringBoot中,Tomcat服务核心控制类,通过TomcatServletWebServerFactory工厂类创建,对Tomcat生命周期的管理提供了一层包装;

public class TomcatWebServer implements WebServer {
    private final Tomcat tomcat;
    private final Map&lt;Service, Connector[]&gt; serviceConnectors = new HashMap&lt;&gt;();
}
登录后复制
  • Apache组件中,轻量级Tomcat启动器,提供了Tomcat基础配置,比如默认的Port和HostName,以及生命周期管理的方法,TomcatWebServer类中调用的就是该API中的具体方法;

public class Tomcat {
    protected Server server;
    protected int port = 8080;
    protected String hostname = "localhost";
    // 初始化服务
    public void init() throws LifecycleException {
        getServer();
        server.init();
    }
    // 启动服务
    public void start() throws LifecycleException {
        getServer();
        server.start();
    }
    // 停止服务
    public void stop() throws LifecycleException {
        getServer();
        server.stop();
    }
}
登录后复制

2、核心方法

2.1 初始化,初始化时,调用Apache-Tomcat类中启动方法;

public class TomcatWebServer implements WebServer {
    /**
     * 初始化方法
     */
    private void initialize() throws WebServerException {
        // 控制台日志
        logger.info("Tomcat initialized with port(s): " + getPortsDescription(false));
        synchronized (this.monitor) {
            // 调用Apache-Tomcat类中启动方法
            this.tomcat.start();
        }
    }
}
登录后复制

2.2 启动,在初始化的方法中,调用的Tomcat启动方法,这里对状态进行校验并输出日志;

public class TomcatWebServer implements WebServer {
    /**
     * 启动方法
     */
    public void start() throws WebServerException {
        synchronized (this.monitor) {
            if (this.started) {
                return;
            }
            checkThatConnectorsHaveStarted();
            // 启动状态的标识
            this.started = true;
            // 控制台日志
            logger.info("Tomcat started on port(s): " + getPortsDescription(true) + " with context path &#39;"
                    + getContextPath() + "&#39;");
        }
    }
}
登录后复制

2.3 停止,在组件生命周期的常规管理逻辑中,停止服务之后进行销毁动作的执行,其中自然涉及到多个状态标识的转换;

public class TomcatWebServer implements WebServer {
    /**
     * 停止方法
     */
    public void stop() throws WebServerException {
        synchronized (this.monitor) {
            // 状态变化
            boolean wasStarted = this.started;
            this.started = false;
            // Tomcat服务停止
            stopTomcat();
            this.tomcat.destroy();
        }
    }
}
登录后复制

以上是SpringBoot集成Tomcat服务架构怎么配置的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

tomcat如何部署jar项目 tomcat如何部署jar项目 Apr 21, 2024 am 07:27 AM

要将 JAR 项目部署到 Tomcat,请遵循以下步骤:下载并解压 Tomcat。配置 server.xml 文件,设置端口和项目部署路径。将 JAR 文件复制到指定的部署路径中。启动 Tomcat。使用提供的 URL 访问已部署的项目。

tomcat服务器怎么让外网访问 tomcat服务器怎么让外网访问 Apr 21, 2024 am 07:22 AM

要让 Tomcat 服务器对外网访问,需要:修改 Tomcat 配置文件,允许外部连接。添加防火墙规则,允许访问 Tomcat 服务器端口。创建 DNS 记录,将域名指向 Tomcat 服务器公有 IP。可选:使用反向代理提升安全性和性能。可选:设置 HTTPS 以提高安全性。

tomcat安装目录在哪里 tomcat安装目录在哪里 Apr 21, 2024 am 07:48 AM

Tomcat 安装目录:默认路径:Windows:C:\Program Files\Apache Software Foundation\Tomcat 9.0macOS:/Library/Tomcat/Tomcat 9.0Linux:/opt/tomcat/tomcat9自定义路径:安装时可指定。查找安装目录:使用 whereis 或 locate 命令。

tomcat怎么部署多个项目 tomcat怎么部署多个项目 Apr 21, 2024 am 09:33 AM

要通过 Tomcat 部署多个项目,需要创建每个项目的 webapp 目录,然后:自动部署:将 webapp 目录放置在 Tomcat 的 webapps 目录中。手动部署:在 Tomcat 的 manager 应用程序中手动部署项目。项目部署后,可以通过其部署名称访问,例如:http://localhost:8080/project1。

tomcat并发连接数怎么查看 tomcat并发连接数怎么查看 Apr 21, 2024 am 08:12 AM

查看Tomcat并发连接数的方法:访问Tomcat Manager页面(http://localhost:8080/manager/html),输入用户名和密码。在左侧导航栏中点击Status->Sessions,即可在页面顶部看到并发连接数。

tomcat网站根目录在哪里 tomcat网站根目录在哪里 Apr 21, 2024 am 09:27 AM

Tomcat 网站根目录位于 Tomcat 的 webapps 子目录中,用于存储 Web 应用程序文件、静态资源和 WEB-INF 目录;它可以通过查找 Tomcat 配置文件中的 docBase 属性来找到。

tomcat的端口号怎么看 tomcat的端口号怎么看 Apr 21, 2024 am 08:00 AM

Tomcat端口号可通过以下方法查看:检查server.xml文件中的<Connector>元素的port属性。访问Tomcat管理界面(http://localhost:8080/manager/html)并查看"Status"选项卡。在命令行中运行"catalina.sh version"并查看"Port:"行。

tomcat怎么配置域名 tomcat怎么配置域名 Apr 21, 2024 am 09:52 AM

要配置 Tomcat 使用域名,请执行以下步骤:创建服务器.xml 备份。打开 server.xml 并添加 Host 元素,将 example.com 替换为你的域名。为域名创建 SSL 证书(如果需要)。在 server.xml 中添加 SSL 连接器,更改端口、密钥库文件和密码。保存 server.xml。重新启动 Tomcat。

See all articles