一: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 开发场景。
最后,我们可以使用内置的Tomcat服务器通过`mvn spring-boot:run`命令运行应用,或者构建为jar文件部署到云服务器。 本项目通过实践的方式,帮助初学者掌握Spring Boot 2.4中的RESTful CRUD操作,理解Spring Boot...
《Spring Boot API 项目种子:深入理解与实践》 在当今的互联网开发中,Spring Boot以其简洁、高效和快速启动的特点,已经成为...无论是初学者还是经验丰富的开发者,都能从中受益,加深对Spring Boot的理解和应用。
《Spring Boot结合MyBatis构建微服务Demo详解》 在当今的互联网开发中,Spring Boot以其简洁、快速的特性成为了主流的Java应用框架。而MyBatis作为一款轻量级的持久层框架,以其灵活易用的特点深受开发者喜爱。本篇...
Spring Boot支持内嵌Tomcat、Jetty或Undertow,这使得应用可以直接作为可执行的jar运行,而无需外部容器。 4. **自动配置(Auto Configuration)**: Spring Boot根据类路径中的jar和配置文件,自动配置Spring...
1. **自动配置**:Spring Boot 可以根据你在类路径中的 jar 文件自动配置 Spring 容器。例如,如果你添加了 `spring-data-jpa`,它会自动配置相应的数据源、JPA 实现(如 Hibernate)和事务管理器。 2. **嵌入式...
3. 内嵌式Servlet容器:Spring Boot支持内嵌Tomcat、Jetty或Undertow,无需额外部署WAR文件。 4. 健康检查:提供健康检查API,用于监控系统状态。 5. 配置文件:通过application.properties或application.yml进行...
总之,《Spring Boot参考指南》中文版是学习和实践Spring Boot不可或缺的资源,它全面地讲解了框架的各种功能和用法,无论是初学者还是经验丰富的开发者都能从中受益。通过阅读和实践,开发者能够更高效地构建健壮、...
深入研究Spring Boot 1.5.6.RELEASE的源码,可以帮助我们更好地理解Spring Boot的运行原理,定制化需求,以及优化应用性能。对于初学者,建议从`SpringApplication`和`SpringBootServletInitializer`两个关键类入手...
这可能包括如何使用Maven或Gradle初始化项目,配置应用主类,以及如何利用Spring Boot的内嵌Servlet容器(如Tomcat)启动Web应用。 对于计算机科学的学生来说,这个压缩包可以作为毕业设计论文的参考资源,他们可以...
- **嵌入式Servlet容器:**Spring Boot内置了Tomcat、Jetty等容器,无需额外部署。 - **依赖管理:**提供了一套统一的依赖版本管理方案,避免版本冲突问题。 - **生产就绪特性:**包括健康检查、监控等功能,方便...
《Spring Boot中文参考指南》是一本全面且深入的教程,无论你是初学者还是经验丰富的开发者,都能从中获取到宝贵的实战经验和深入理解。通过学习,你将能够熟练地运用Spring Boot来构建高效、可维护的现代Java应用。
3. 内嵌服务器:Spring Boot支持内嵌Tomcat、Jetty等服务器,无需额外部署。 4. 快速构建:通过starter pom,可以快速引入所需依赖,如数据访问、Web、安全等。 二、Spring Boot与RabbitMQ整合 RabbitMQ是一个开源...
1. Auto-configuration:Spring Boot通过扫描类路径中的特定注解(如`@EnableAutoConfiguration`),自动配置Spring容器中的bean。例如,如果检测到`HSQLDB`库存在,就会自动配置相应的数据源和JPA设置。 2. @...
在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...
《Spring Boot中文参考指南》是Spring Boot初学者和开发者的重要学习资源,它详细阐述了Spring Boot框架的核心概念、配置和实践方法。Spring Boot是Java领域的一款流行的应用程序启动器,旨在简化Spring应用的初始...
SpringBoot学习Demo是一个针对初学者的入门项目,旨在帮助开发者快速理解并掌握Spring Boot的核心概念和用法。Spring Boot是Spring框架的一个模块,它简化了创建独立的、生产级别的基于Spring的应用程序的过程,通过...
2. **内嵌式Web服务器**:Spring Boot支持内嵌Tomcat、Jetty或Undertow等Web服务器,这使得你可以直接运行一个jar文件启动应用,无需额外部署到外部服务器。 3. **起步依赖(Starter POMs)**:Spring Boot提供了多...
1. **自动配置**:Spring Boot 根据项目中包含的依赖自动生成相应的配置,例如,引入 `spring-boot-starter-web` 会自动配置 Spring MVC 和 Tomcat 服务器。 2. **起步依赖(Starter POMs)**:Spring Boot 提供了一...
master.zip"这一压缩包,深入探讨Spring Boot的核心概念及实战应用,包括Druid、Ehcache、JWT、Mybatis、Generator、Quartz、Scheduling、Shiro以及Upload等模块,旨在帮助初学者从零开始全面掌握Spring Boot。...