015-Spring Boot 定制和优化内嵌的Tomcat
2024-09-05 23:25:34
一、内嵌web容器
参看http://www.cnblogs.com/bjlhx/p/8372584.html
查看源码可知提供以下三种:
二、定制优化tomcat
2.1、配置文件配置
通过application.properties配置tomcat
端口配置:server.port=10001
地址配置:server.adress=192.168.1.1
通过ServerProperties查看到tomcat变量,进入即可配置,如下
启用日志配置:
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=d:/logs
原理分析
在spring-boot-autoconfigure-1.5.9.RELEASE.jar包中的org.springframework.boot.autoconfigure.web.ServerProperties查看
可以查看到以上所示属性
2.2、通过代码方式配置一-实现EmbeddedServletContainerCustomizer接口
EmbeddedServletContainerCustomizer→三个具体默认实现
1》代码方式自定义
定义一个类MyEmbeddedServletContainerCustomizer实现EmbeddedServletContainerCustomizer接口,即可
设置基本配置
@Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.out.println(container.getClass());
TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container;
factory.setPort(8181);
factory.setBaseDirectory(new File("d:/tmp/tomcat"));
}
}
设置日志
package com.lhx.spring.springboot_web; import java.io.File; import org.apache.catalina.valves.AccessLogValve;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.stereotype.Component; @Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.out.println(container.getClass());
TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container;
factory.setPort(8181);
factory.setBaseDirectory(new File("d:/tmp/tomcat")); factory.addContextValves(getAccessLogValve());
} private AccessLogValve getAccessLogValve() {
AccessLogValve log = new AccessLogValve();
log.setDirectory("d:/tmp/logs");
log.setEnabled(true);
log.setPattern("common");
log.setPrefix("spring-boot-lhx-access-log");
log.setSuffix(".txt");
return log; }
}
设置连接数配置、最大线程
package com.lhx.spring.springboot_web; import java.io.File; import org.apache.catalina.connector.Connector;
import org.apache.catalina.valves.AccessLogValve;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.stereotype.Component; @Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.out.println(container.getClass());
TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container;
factory.setPort(8181);
factory.setBaseDirectory(new File("d:/tmp/tomcat")); factory.addContextValves(getAccessLogValve()); factory.addConnectorCustomizers(new MyTomcatConnectorCustomizers());
} private AccessLogValve getAccessLogValve() {
AccessLogValve log = new AccessLogValve();
log.setDirectory("d:/tmp/logs");
log.setEnabled(true);
log.setPattern("common");
log.setPrefix("spring-boot-lhx-access-log");
log.setSuffix(".txt");
return log;
} }
class MyTomcatConnectorCustomizers implements TomcatConnectorCustomizer{ @Override
public void customize(Connector connector) {
Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();
protocol.setMaxConnections(2000);
protocol.setMaxThreads(500);
}
}
2.5、通过代码方式配置二-默认配置类方式
package com.lhx.spring.springboot_web; import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus; @SpringBootConfiguration
public class WebServletConfiguration {
@Bean
public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.setPort(1008);
factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
return factory;
}
}
添加初始化
factory.addInitializers((servletContext)->{
System.out.println("----------servletContext startup----------");
});
此时可以获取到servletContext信息,可以进行添加Filter、设置Attribute等
源码地址:https://github.com/bjlhx15/spring-boot.git
最新文章
- ./adb: cannot execute binary file:
- android提供ToolBar实现划动菜单的陷阱
- [HDOJ1231]最大连续子序列
- SQL开发技巧(二) 【转】感觉他写的很好
- 开发一个iOS应用没有那么容易
- JellyViewPager
- Ledongli
- SurfaceView的使用
- hdu 1159 Common Subsequence(LCS最长公共子序列)
- <;runtime>; 的 <;assemblyBinding>; 元素
- activity变成Dialog的样式设置
- TP3.2 配置最新的阿里大于sdk
- 201521123017 《Java程序设计》第12周学习总结
- C# 委托与事件详解(二)
- _future_用法总结
- dubbo源码分析3——SPI机制中的ExtensionLoader类的objectFactory属性分析
- 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明
- Flex中如何利用FocusManager类的setFocus函数设置TextInput的焦点的例子
- Eureka (数学组合 + 斜率)
- ElasticeSearch(五)分布式索引架构
热门文章
- Kali系统 metasploit 使用教程
- IDEA错误: 找不到或无法加载主类 com.xxx.freight.dofreight.doFreight解决办法
- MySQL语句之数据的增删改查
- express 设置允许跨域访问
- 基于谷歌开源的TensorFlow Object Detection API视频物体识别系统搭建自己的应用(四)
- layui隐藏表格列
- python常用模块学习3
- bzoj4408 [Fjoi 2016]神秘数 &; bzoj4299 Codechef FRBSUM 主席树+二分+贪心
- php import require include use vendor
- 黑客已经瞄准5G网络,如何防止LTE网络攻击?