一:spring boot定制tomcat容器
1. 首先spring boot 通过注解@EnableAutoConfiguration初始化各种自动装配和bean,其中默认注册 TomcatEmbeddedServletContainerFactory 到 DefaultListableBeanFactory。
2. 转化为java语言:定制一个bean. 第一反应就是借鉴spring aop思想,继承BeanPostProcessor定制bean。
3. spring boot 默认实现是通过EmbeddedServletContainerCustomizerBeanPostProcessor定制tomcat容器,可通过EmbeddedServletContainerCustomizer接口扩展
4.第二种方式是自定义一个bean: EmbeddedServletContainerFactory。
实现Demo:
@Component public class TomcatContainerCustomizer implements EmbeddedServletContainerCustomizer { private static final Logger logger = LoggerFactory.getLogger(TomcatContainerCustomizer.class); private static final String TOMCAT_ACCEPTOR_COUNT = "server.tomcat.accept-count"; @Autowired private Environment environment; @Override public void customize(ConfigurableEmbeddedServletContainer container) { if (!(container instanceof TomcatEmbeddedServletContainerFactory)) { return; } if (!environment.containsProperty(TOMCAT_ACCEPTOR_COUNT)) { return; } TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container; tomcat.addConnectorCustomizers(new TomcatConnectorCustomizer() { @Override public void customize(Connector connector) { ProtocolHandler handler = connector.getProtocolHandler(); if (handler instanceof Http11NioProtocol) { Http11NioProtocol http = (Http11NioProtocol) handler; int acceptCount = Integer.parseInt(environment.getProperty(TOMCAT_ACCEPTOR_COUNT)); http.setBacklog(acceptCount); logger.info("Setting tomcat accept count to {}", acceptCount); } } }); } }
相关源码截图:
EmbeddedWebApplicationContext和 EmbeddedServletContainerCustomizerBeanPostProcessor类
最后:质疑和想象
1。Java在1.5引入java.lang.instrument,由此可以实现一个Java agent,通过此agent来修改类的字节码即改变一个类。也就是可以定制一个类, 更底层的定制一个bean,其实spring aop可选择JDK动态代理和cglib动态代理,默认采用的是JAVA动态代理,这2个代理的本质也是修改字节码,和instrument思想一样。
2.instrument 应用场景大部分都是监控系统的运行情况,比如分布式系统调用链中分析服务的调用情况。
相关推荐
使用SpringMVC构建web(包括RESTful)应用程序的初学者。...spring-boot-starter-web 为我们提供了嵌入的 Servlet 容器以及 SpringMVC 的依赖,并为 Spring MVC 提供了大量自动配置,可以适用于大多数 Web 开发场景。
SpringBootForBeginners Spring Boot初学者教程安装工具PDF: : 视频: : GIT存储库: : 课程大纲介绍Spring Boot拥有很多魔力。 用它开发服务既酷又有趣。 Spring Boot使创建“ Spring”的独立,生产级基于Spring的...
- apache-tomcat-7.0.78或更高版本 - mysql-5.6.24或更高版本 ## 部署说明 1. 创建数据库。使用MySQL,字符集选择为`utf8`或者`utf8mb4`(支持更多特殊字符,推荐)。 2. 创建数据库导入数据。数据库在`springBoot...
spring boot+mybatis开发java web网页版电子商城网站(适合spring boot初学者学习) 功能模块 - 首页 1. 导航栏 2. 轮播图 3. 分栏推荐 搜索 1. 显示关键词搜到的产品 2. 能通过产品进入详情页 - 详情页 1. 显示...
简单的网站即可启动新的Spring Boot应用程序 选择元数据项 POM信息 团体 神器 名称 描述 Java版本 Spring启动版 包装 选择入门依赖 核 网页 模板引擎 数据 云 数据库 社会的 输入/输出 行动 依存关系 在此演示中,...
基于SSM实现的一个个人博客系统,适合初学SSM和个人博客制作的同学学习。有了这个源码,直接买了阿里云或腾讯服务器,就可以部署独立个人技术博客啦。博客源码主要涉及技术包括的包括 Maven、Spring、SpringMVC、...
spring boot+mybatis开发java web网页版电子商城网站(适合spring boot初学者学习) ## 功能模块 - 首页 1. 导航栏 2. 轮播图 3. 分栏推荐 - 搜索 1. 显示关键词搜到的产品 2. 能通过产品进入详情页 - 详情页 1. ...
如果你是spring boot初学者,那么此项目非常适合你。 ## 编译环境 : >jdk 1.8 > >mysql 5.5 > >tomcat 7 ## 框架 : >springboot2.0 > >mybatis ## jar包管理工具: > Maven ## 编译器 : >IDEA ## ...
如果你是spring boot初学者,那么此项目非常适合你。 ## 编译环境 : >jdk 1.8 > >mysql 5.5 > >tomcat 7 ## 框架 : >springboot2.0 > >mybatis ## jar包管理工具: > Maven ## 编译器 : >IDEA
Springboot在Maven环境下完美整合mybatis、springMVC,代码经过测试可以运行,是Springboot初学者的好材料,打包生成的war包直接放到tomcat的webapps目录下即可运行,启动tomcat时会出现Springboot的logo图标。...
内容概要:此系统是用SpringBoot+Mysql开发的教学质量评价系统,压缩包有源码和...适用场景及目标:希望能帮助到初学SpringBoot做一个简单的小项目。 其他说明:如果你们把代码优化的更好,记得私信我,我们共同学习。
如果你是spring boot初学者,那么此项目非常适合你。如果喜欢,请随手给个star,谢谢。编译环境: 杰克1.8 MySQL 5.5 Tomcat7框架: springboot2.0 Mybatisjar包管理工具: 玛文编译器: 主意完成进度: > 完成系统...