SpringBoot集成Tomcat服务架构怎么配置(springboot,tomcat,开发技术)

时间:2024-05-05 05:13:57 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、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})publicclassServletWebServerFactoryAutoConfiguration{ @Bean @ConditionalOnClass(name="org.apache.catalina.startup.Tomcat") publicTomcatServletWebServerFactoryCustomizertomcatServletWebServerFactoryCustomizer( ServerPropertiesserverProperties){ returnnewTomcatServletWebServerFactoryCustomizer(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)publicclassServerProperties{privateIntegerport;publicstaticclassTomcat{privateCharseturiEncoding=StandardCharsets.UTF_8;privateintmaxThreads=200;privateintminSpareThreads=10;}}

3、配置加载分析

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

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

publicclassTomcatWebServerFactoryCustomizerimplementsWebServerFactoryCustomizer&lt;ConfigurableTomcatWebServerFactory&gt;{@Overridepublicvoidcustomize(ConfigurableTomcatWebServerFactoryfactory){ServerPropertiesproperties=this.serverProperties;ServerProperties.TomcattomcatProperties=properties.getTomcat();PropertyMapperpropertyMapper=PropertyMapper.get();customizeStaticResources(factory);}}
  • TomcatWeb服务工厂,这里在创建WebServer时,使用的是Tomcat,需要适当的了解一下Tomcat架构;

publicclassTomcatServletWebServerFactoryextendsAbstractServletWebServerFactoryimplementsConfigurableTomcatWebServerFactory,ResourceLoaderAware{@OverridepublicWebServergetWebServer(ServletContextInitializer...initializers){Tomcattomcat=newTomcat();Connectorconnector=newConnector(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);returngetTomcatWebServer(tomcat);}}

四、周期管理方法

1、控制类

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

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

publicinterfaceWebServer{ //获取监听的端口 intgetPort(); //服务启动 voidstart()throwsWebServerException; //服务停止 voidstop()throwsWebServerException;}
  • SpringBoot中,Tomcat服务核心控制类,通过TomcatServletWebServerFactory工厂类创建,对Tomcat生命周期的管理提供了一层包装;

publicclassTomcatWebServerimplementsWebServer{privatefinalTomcattomcat;privatefinalMap&lt;Service,Connector[]&gt;serviceConnectors=newHashMap&lt;&gt;();}
  • Apache组件中,轻量级Tomcat启动器,提供了Tomcat基础配置,比如默认的Port和HostName,以及生命周期管理的方法,TomcatWebServer类中调用的就是该API中的具体方法;

publicclassTomcat{protectedServerserver;protectedintport=8080;protectedStringhostname="localhost";//初始化服务publicvoidinit()throwsLifecycleException{getServer();server.init();}//启动服务publicvoidstart()throwsLifecycleException{getServer();server.start();}//停止服务publicvoidstop()throwsLifecycleException{getServer();server.stop();}}

2、核心方法

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

publicclassTomcatWebServerimplementsWebServer{/***初始化方法*/privatevoidinitialize()throwsWebServerException{//控制台日志logger.info("Tomcatinitializedwithport(s):"+getPortsDescription(false));synchronized(this.monitor){//调用Apache-Tomcat类中启动方法this.tomcat.start();}}}

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

publicclassTomcatWebServerimplementsWebServer{/***启动方法*/publicvoidstart()throwsWebServerException{synchronized(this.monitor){if(this.started){return;}checkThatConnectorsHaveStarted();//启动状态的标识this.started=true;//控制台日志logger.info("Tomcatstartedonport(s):"+getPortsDescription(true)+"withcontextpath'"+getContextPath()+"'");}}}

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

publicclassTomcatWebServerimplementsWebServer{/***停止方法*/publicvoidstop()throwsWebServerException{synchronized(this.monitor){//状态变化booleanwasStarted=this.started;this.started=false;//Tomcat服务停止stopTomcat();this.tomcat.destroy();}}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:SpringBoot集成Tomcat服务架构怎么配置的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C++中map和set如何使用下一篇:

7 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18