SpringBoot内置Tomcat浅析

一、SpringBoot框架内置Tomcat,开发非常方便,随着SpringBoot的框架升级,内置Tomcat也更新版本。本文SpringBoot框架版本:2.2.10。

       1、如何查看SpringBoot的内置Tomcat的版本?

SpringBoot内置Tomcat浅析_第1张图片      2、SpringBoot的自动配置Tomcat在哪个包下?

           spring.boot.autoconfigure

SpringBoot内置Tomcat浅析_第2张图片

       3、SpringBoot的内置Web容器是Tomca,还支持哪几种,是怎么设计扩展的?

SpringBoot内置Tomcat浅析_第3张图片

      默认的属性都在ServerProperties中配置。

SpringBoot内置Tomcat浅析_第4张图片

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true),忽略不识别的字段配置

WebServer接口定义Web容器的规范
public interface WebServer {

	/**
	 * Starts the web server. Calling this method on an already started server has no
	 * effect.
	 * @throws WebServerException if the server cannot be started
	 */
	void start() throws WebServerException;

	/**
	 * Stops the web server. Calling this method on an already stopped server has no
	 * effect.
	 * @throws WebServerException if the server cannot be stopped
	 */
	void stop() throws WebServerException;

	/**
	 * Return the port this server is listening on.
	 * @return the port (or -1 if none)
	 */
	int getPort();

}

看实现类:org.springframework.boot.web.embedded.tomcat

SpringBoot内置Tomcat浅析_第5张图片

看一个TomcatWebServer的

SpringBoot内置Tomcat浅析_第6张图片

跟进去看一下Tomcat的类,注入内置Tomcat后,是自动启动的。

	public TomcatWebServer(Tomcat tomcat) {
		this(tomcat, true);
	}

在看一下初始化打出端口,使用的Apache的Logging组件打出的日志。

SpringBoot内置Tomcat浅析_第7张图片

获取端口描述信息,如果不单独配置就获取本地默认的8080端口的。

SpringBoot内置Tomcat浅析_第8张图片

SpringBoot内置Tomcat浅析_第9张图片

      4、Tomcat的客户端访问日志如何配置?并保留一定时间

      application.yml中配置

  tomcat:
    basedir: /var/log/tomcat
    accesslog:
      enabled: true
      directory: accessLog
      pattern: '"%t","%{Http_X_Forwarded_For}i","%H","%m","%U%q","%s","%A","%D"'
      prefix: access
      suffix: .log
      rename-on-rotate: true
      max-days: 30
      file-date-format: yyyy-MM-dd

       5、内置Tomcat如何切换Jetty等?

        
            org.springframework.boot
            spring-boot-starter-web
            
                
                    org.springframework.boot
                    spring-boot-starter-tomcat
                
            
        

 引入Jetty包,一般都是用Tomcat的。

        
            org.springframework.boot
            spring-boot-starter-jetty
        

SpringBoot内置Tomcat浅析_第10张图片

为啥可以根据倒包去依赖就可以实现Web容器的自动切换?Spring的条件注解,当类路径下存在Tomcat的类,就会条件注入这个Bean

源码参考:EmbeddedWebServerFactoryCustomizerAutoConfiguration

SpringBoot内置Tomcat浅析_第11张图片

SpringBoot内置Tomcat浅析_第12张图片

       6、优化Tomcat的最大连接数和线程数以及其他参数优化?

SpringBoot内置Tomcat浅析_第13张图片

开启https连接,添加证书路径,以及生产环境证书密码加密等

SpringBoot内置Tomcat浅析_第14张图片

二、添加控制台的日志行号打印

1、application.yml中添加.

logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread]%-5level-%highlight(%C-%M:%L)-%msg%n'

SpringBoot内置Tomcat浅析_第15张图片

比较容易分析源码一些了

SpringBoot内置Tomcat浅析_第16张图片

三、整合Log4j2日志

1、pom文件,默认是logback日志组件,log4j2更通用,性能更佳.

        
            org.springframework.boot
            spring-boot-starter-web
            
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
            
        
        
        
            org.springframework.boot
            spring-boot-starter-log4j2
         

 2、log4j2.xml配置



    
    
        
        walk-boot
        
        ./logs/${APP_NAME}
        
        [%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{bright,green}][%highlight{%p}][%style{%t}{bright,blue}][%style{%C}{bright,yellow}]: %msg%n%style{%throwable}{red}
        
        [%d{yyyy-MM-dd HH:mm:ss.SSS}][%thread]%-5level-[%C-%M:%L]-%msg%n
    
    
    
        
        
        
            
            
            
            
        
        
        
            
            
            
            
            
            
                
                
                
                
            
            
            
        
    
    
    
        
        
        
            
        
        
            
        
    

控制台日志打印

SpringBoot内置Tomcat浅析_第17张图片

日志文件格式:

SpringBoot内置Tomcat浅析_第18张图片

日志压缩格式:

SpringBoot内置Tomcat浅析_第19张图片

后续使用重定向以及其他的加固项再整理吧,开启SSL、监听多个客户端端口整体设计了解了。 

你可能感兴趣的:(SpringBoot框架,Web容器,spring,boot,tomcat,java)