Python 官方文档:入门教程 => 点击学习
目录一、Tomcat集成1、依赖层级2、自动化配置二、Tomcat架构三、Tomcat配置1、基础配置2、属性配置类3、配置加载分析四、周期管理方法1、控制类2、核心方法一、Tomc
使用的成本越低,内部封装越复杂;
在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>
在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);
}
}
Server:代表整个Tomcat容器;
Service:服务器内部的中间组件,将一个或多个Connector绑定到一个Engine上;
Engine:表示特定服务的请求处理管道,接收Connector的请求并响应;
Host:网络主机名称;
Connector:连接器处理与客户端的通信;
Context:代表一个Web应用程序的上下文;
参考Tomcat9.0版本的核心组件描述,对于框架有大致的了解后,再去分析集成原理,会更容易把握主线逻辑;
在配置文件中,对Tomcat做一些基础性的设置,查看下面的配置类可以知道,这些属性存在默认值;
server:
port: 8082 # 端口号
tomcat: # Tomcat组件
uri-encoding: UTF-8 # URI编码
max-threads: 100 # 最大工作线程
min-spare-threads: 10 # 最小工作线程
在服务配置中,提供多种服务器的适配,像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;
}
}
public class TomcatWebServerFactoryCustomizer
implements WebServerFactoryCustomizer<ConfigurableTomcatWebServerFactory> {
@Override
public void customize(ConfigurableTomcatWebServerFactory factory) {
ServerProperties properties = this.serverProperties;
ServerProperties.Tomcat tomcatProperties = properties.getTomcat();
PropertyMapper propertyMapper = PropertyMapper.get();
customizeStaticResources(factory);
}
}
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);
}
}
public interface WebServer {
// 获取监听的端口
int getPort();
// 服务启动
void start() throws WebServerException;
// 服务停止
void stop() throws WebServerException;
}
public class TomcatWebServer implements WebServer {
private final Tomcat tomcat;
private final Map<Service, Connector[]> serviceConnectors = new HashMap<>();
}
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.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 '"
+ getContextPath() + "'");
}
}
}
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();
}
}
}
参考源码
编程文档:
https://gitee.com/cicadasmile/butte-java-note
应用仓库:
Https://gitee.com/cicadasmile/butte-flyer-parent
以上就是SpringBoot集成Tomcat服务架构配置的详细内容,更多关于SpringBoot集成Tomcat的资料请关注编程网其它相关文章!
--结束END--
本文标题: SpringBoot集成Tomcat服务架构配置
本文链接: https://lsjlt.com/news/197146.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0