Spring Boot是现今最流行的Java Web框架之一,其最大的优点是使用内嵌的Tomcat容器,降低了Web应用的开发和部署成本。本文将深入分析Spring Boot内嵌Tomcat应用的原理,并介绍两个示例。
1. Spring Boot内嵌Tomcat原理
Spring Boot应用的内嵌Tomcat配置在pom.xml文件中的依赖中引入了Tomcat的starter。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
Spring Boot内嵌Tomcat是使用Tomcat的servlet容器、连接器、会话和JSP支持,通过TomcatEmbeddedServletContainerFactory来创建tomcat容器。
Spring Boot启动时内部类TomcatEmbeddedServletContainerFactoryLoader会加载子类TomcatEmbeddedServletContainerFactory,同时读取配置文件application.properties中的相关配置项,完成TomcatEmbeddedServletContainerFactory的实例化,并将其返回给Spring核心。
public class TomcatEmbeddedServletContainerFactoryLoader {
private static final String FACTORY_CLASS_NAME = "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory";
private static final String CUSTOMIZER_CLASS_NAME = "org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerCustomizer";
...
public static EmbeddedServletContainerFactory get() {
Class<?> factoryClass = getFactoryClass();
try {
return (EmbeddedServletContainerFactory) factoryClass.newInstance();
}
...
}
private static Class<?> getFactoryClass() {
try {
return Class.forName(FACTORY_CLASS_NAME);
}
...
}
private static ConfigurableTomcatContextCustomizer getTomcatContextCustomizer() {
try {
Class<?> customizerClass = Class.forName(CUSTOMIZER_CLASS_NAME);
return (ConfigurableTomcatContextCustomizer) customizerClass.newInstance();
}
...
}
}
TomcatEmbeddedServletContainerFactory就是Spring Boot内嵌Tomcat的核心。
public class TomcatEmbeddedServletContainerFactory extends AbstractEmbeddedServletContainerFactory
implements EmbeddedServletContainerFactory, ResourceLoaderAware, EnvironmentAware {
...
}
在TomcatEmbeddedServletContainerFactory实例化完成之后,我们就可以对其进行自定义配置,例如设置端口、Session失效时间、SSL、JSP支持等。
2. 示例
示例一:设置Tomcat的停止端口
在application.properties配置文件增加如下配置,设置Tomcat停止的端口号。
server.port=8080
server.tomcat.shutdown-port=8005
在Spring Boot启动后,可以监听Tomcat的停止端口号停止Tomcat服务。
示例二:使用Thymeleaf模版引擎
如果想使用Thymeleaf模版引擎,只需要在pom.xml文件中增加thymeleaf的starter依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
同时,还需要配置相关的Thymeleaf属性。
spring.thymeleaf.cache=false
spring.thymeleaf.enabled=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
以上就是两个示例,通过深入分析Spring Boot内嵌Tomcat的原理以及相关的示例,相信你已经对于内嵌Tomcat应用的原理和使用有了更加深入的了解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot内嵌tomcat应用原理深入分析 - Python技术站