`
ahua186186
  • 浏览: 562869 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

初学spring boot (定制tomcat容器)--002

 
阅读更多

 

一: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 应用场景大部分都是监控系统的运行情况,比如分布式系统调用链中分析服务的调用情况。

 

 

 

 

  • 大小: 44.6 KB
  • 大小: 55 KB
  • 大小: 45.1 KB
分享到:
评论

相关推荐

    spring-boot-starter-web.jar

    使用SpringMVC构建web(包括RESTful)应用程序的初学者。...spring-boot-starter-web 为我们提供了嵌入的 Servlet 容器以及 SpringMVC 的依赖,并为 Spring MVC 提供了大量自动配置,可以适用于大多数 Web 开发场景。

    spring-boot-04-web-restfulcrud

    最后,我们可以使用内置的Tomcat服务器通过`mvn spring-boot:run`命令运行应用,或者构建为jar文件部署到云服务器。 本项目通过实践的方式,帮助初学者掌握Spring Boot 2.4中的RESTful CRUD操作,理解Spring Boot...

    spring-boot-api-project-seed-master.zip

    《Spring Boot API 项目种子:深入理解与实践》 在当今的互联网开发中,Spring Boot以其简洁、高效和快速启动的特点,已经成为...无论是初学者还是经验丰富的开发者,都能从中受益,加深对Spring Boot的理解和应用。

    spring-boot-examples-master.zip

    《Spring Boot结合MyBatis构建微服务Demo详解》 在当今的互联网开发中,Spring Boot以其简洁、快速的特性成为了主流的Java应用框架。而MyBatis作为一款轻量级的持久层框架,以其灵活易用的特点深受开发者喜爱。本篇...

    spring-boot-reference-guide-zh.pdf

    Spring Boot支持内嵌Tomcat、Jetty或Undertow,这使得应用可以直接作为可执行的jar运行,而无需外部容器。 4. **自动配置(Auto Configuration)**: Spring Boot根据类路径中的jar和配置文件,自动配置Spring...

    spring-boot-base-master.zip_boot_spring boot_spring boot master_

    1. **自动配置**:Spring Boot 可以根据你在类路径中的 jar 文件自动配置 Spring 容器。例如,如果你添加了 `spring-data-jpa`,它会自动配置相应的数据源、JPA 实现(如 Hibernate)和事务管理器。 2. **嵌入式...

    Spring-Boot-Reference-Guide, Spring Boot Reference Guide中文翻译 -《Spring Boot参考指南》.zip

    3. 内嵌式Servlet容器:Spring Boot支持内嵌Tomcat、Jetty或Undertow,无需额外部署WAR文件。 4. 健康检查:提供健康检查API,用于监控系统状态。 5. 配置文件:通过application.properties或application.yml进行...

    spring-boot-reference-guide-zh-中文, spring-boot参考指南

    总之,《Spring Boot参考指南》中文版是学习和实践Spring Boot不可或缺的资源,它全面地讲解了框架的各种功能和用法,无论是初学者还是经验丰富的开发者都能从中受益。通过阅读和实践,开发者能够更高效地构建健壮、...

    spring-boot-1.5.6-src

    深入研究Spring Boot 1.5.6.RELEASE的源码,可以帮助我们更好地理解Spring Boot的运行原理,定制化需求,以及优化应用性能。对于初学者,建议从`SpringApplication`和`SpringBootServletInitializer`两个关键类入手...

    Spring Boot应用开发框架 v2.7.17.zip

    这可能包括如何使用Maven或Gradle初始化项目,配置应用主类,以及如何利用Spring Boot的内嵌Servlet容器(如Tomcat)启动Web应用。 对于计算机科学的学生来说,这个压缩包可以作为毕业设计论文的参考资源,他们可以...

    十分钟上手spring boot

    - **嵌入式Servlet容器:**Spring Boot内置了Tomcat、Jetty等容器,无需额外部署。 - **依赖管理:**提供了一套统一的依赖版本管理方案,避免版本冲突问题。 - **生产就绪特性:**包括健康检查、监控等功能,方便...

    spring-boot-中文PDF版

    《Spring Boot中文参考指南》是一本全面且深入的教程,无论你是初学者还是经验丰富的开发者,都能从中获取到宝贵的实战经验和深入理解。通过学习,你将能够熟练地运用Spring Boot来构建高效、可维护的现代Java应用。

    spring-boot-learning-demo-master.zip

    3. 内嵌服务器:Spring Boot支持内嵌Tomcat、Jetty等服务器,无需额外部署。 4. 快速构建:通过starter pom,可以快速引入所需依赖,如数据访问、Web、安全等。 二、Spring Boot与RabbitMQ整合 RabbitMQ是一个开源...

    spring-boot-1.5.3.RELEASE

    1. Auto-configuration:Spring Boot通过扫描类路径中的特定注解(如`@EnableAutoConfiguration`),自动配置Spring容器中的bean。例如,如果检测到`HSQLDB`库存在,就会自动配置相应的数据源和JPA设置。 2. @...

    Spring Boot讲义.pdf

    在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...

    中文 文档spring-boot-reference-guide-zh.zip_chaink3s_experiment65w_g

    《Spring Boot中文参考指南》是Spring Boot初学者和开发者的重要学习资源,它详细阐述了Spring Boot框架的核心概念、配置和实践方法。Spring Boot是Java领域的一款流行的应用程序启动器,旨在简化Spring应用的初始...

    spring-boot学习demo.zip_DEMO_SpringBoot_spring boot_spring-boot_sp

    SpringBoot学习Demo是一个针对初学者的入门项目,旨在帮助开发者快速理解并掌握Spring Boot的核心概念和用法。Spring Boot是Spring框架的一个模块,它简化了创建独立的、生产级别的基于Spring的应用程序的过程,通过...

    spring-boot 1.2.4.release

    2. **内嵌式Web服务器**:Spring Boot支持内嵌Tomcat、Jetty或Undertow等Web服务器,这使得你可以直接运行一个jar文件启动应用,无需额外部署到外部服务器。 3. **起步依赖(Starter POMs)**:Spring Boot提供了多...

    Spring Boot 进阶笔记(详细全面) 中文PDF完整版.pdf

    1. **自动配置**:Spring Boot 根据项目中包含的依赖自动生成相应的配置,例如,引入 `spring-boot-starter-web` 会自动配置 Spring MVC 和 Tomcat 服务器。 2. **起步依赖(Starter POMs)**:Spring Boot 提供了一...

    spring-boot-study-master.zip

    master.zip"这一压缩包,深入探讨Spring Boot的核心概念及实战应用,包括Druid、Ehcache、JWT、Mybatis、Generator、Quartz、Scheduling、Shiro以及Upload等模块,旨在帮助初学者从零开始全面掌握Spring Boot。...

Global site tag (gtag.js) - Google Analytics