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

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

      2、SpringBoot的自动配置Tomcat在哪个包下?

spring.boot.autoconfigure

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

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

@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

看一个TomcatWebServer的

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

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

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

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

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

application.yml中配置

  tomcat:basedir: /var/log/tomcataccesslog:enabled: truedirectory: accessLogpattern: '"%t","%{Http_X_Forwarded_For}i","%H","%m","%U%q","%s","%A","%D"'prefix: accesssuffix: .logrename-on-rotate: truemax-days: 30file-date-format: yyyy-MM-dd

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

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency>

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

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jetty</artifactId></dependency>

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

源码参考:EmbeddedWebServerFactoryCustomizerAutoConfiguration

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

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

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

1、application.yml中添加.

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

比较容易分析源码一些了

三、整合Log4j2日志

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

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- springboot默认是用logback的日志框架的 --><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><!-- 引入log4j2依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency> 

2、log4j2.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="WARN" monitorInterval="60"><!--变量配置--><Properties><!--应用名称--><property name="APP_NAME">walk-boot</property><!--日志存放路径,当前路径还是相对路径 ,大型项目各个微服务可以统一模块,比如/var/log/xxx,单独挂磁盘,确保服务日志目录正常读写 --><property name="LOG_PATH">./logs/${APP_NAME}</property><!--日志输出格式-控制台--><property name="PATTERN_CONSOLE">[%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}</property><!--日志输出格式-文件--><property name="PATTERN_FILE">[%d{yyyy-MM-dd HH:mm:ss.SSS}][%thread]%-5level-[%C-%M:%L]-%msg%n</property></Properties><!--定义日志输出目的地,内容和格式等--><Appenders><!--可归档文件1. fileName: 日志存储路径2. filePattern: 历史日志封存路径。其中%d{yyyy-MM-dd}表示了日志的时间单位是天,log4j2自动识别zip等后缀,表示历史日志需要压缩--><!--控制台--><Console name="Console" target="SYSTEM_OUT"><!--输出日志的格式:1.不设置默认为: %m%n2.disableAnsi="false" noConsoleNoAnsi="false" 配置开启支持%highlight彩色日志--><PatternLayout pattern="${PATTERN_CONSOLE}" disableAnsi="false" noConsoleNoAnsi="false"/><!--只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="DEBUG" onMatch="ACCEPT" onMismatch="DENY"/></Console><!--业务定义--><RollingFile name="Service" fileName="${LOG_PATH}/${APP_NAME}.log" filePattern="${LOG_PATH}/$${date:yyyy-MM}/${APP_NAME}-%d{yyyy-MM-dd}_%i.log.gz"><!--输出日志的格式, 不设置默认为:%m%n--><PatternLayout pattern="${PATTERN_FILE}"/><!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/><!--归档设置--><Policies><!--按时间间隔归档:1. interval=时间间隔, 单位由filePattern的%d日期格式指定, 此处配置代表每一天归档一次2. modulate="true" 是否对interval取模,决定了下一次触发的时间点--><TimeBasedTriggeringPolicy interval="1" modulate="true" /><!-- 按照日志文件的大小: size表示当前日志文件的最大size,支持单位:KB/MB/GB--><SizeBasedTriggeringPolicy size="50MB"/></Policies><!-- 历史日志配置: 该属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--><DefaultRolloverStrategy max="30"/></RollingFile></Appenders><!--Loggers配置--><Loggers><!--注意点:1. logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等:(1). name: 用来指定该logger所适用的类或者类所在的包全路径,继承自Root节点.(2). AppenderRef:关联的Appender, 只有定义了logger并引入的appender,appender才会生效(3). additivity: logEvent的传递性。true LogEvent处理后传递给父Logger打印。false LogEvent处理后不再向上传递给父Logger(解决日志重复输出问题)(4). logger配置的level必须高于或等于Appenders中ThresholdFilter配置的过滤level, 否则会造成信息丢失2. root配置日志的根节点--><!-- 按照模块划分日志 --><logger name="com.boot.skywalk" level="info" additivity="false"><AppenderRef ref="Service"/></logger><root level="info"><AppenderRef ref="Console"/></root></Loggers>
</Configuration>

控制台日志打印

日志文件格式:

日志压缩格式:

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

SpringBoot内置Tomcat浅析相关推荐

  1. SpringBoot内置tomcat出现error:An incompatible version [1.1.32] of the APR based Apache Tomcat Native lib

    SpringBoot内置tomcat出现error:An incompatible version [1.1.32] of the APR based Apache Tomcat Native lib ...

  2. SpringBoot内置Tomcat支持多大并发量和连接数

    SpringBoot内置Tomcat,再默认设置中,Tomcat的最大线程数是200,最大连接数是10000.支持的并发量是指连接数,200个线程如何处理10000条连接的? Tomcat有两种处理连 ...

  3. SpringBoot内置tomcat出现APR版本过低解决办法

    SpringBoot内置tomcat出现error:An incompatible version [1.1.32] of the APR based Apache Tomcat Native lib ...

  4. Springboot内置Tomcat配置参数调优

    Springboot内置Tomcat配置参数调优,首先,线程数是一个重点,每一次HTTP请求到达Web服务器,Web服务器都会创建一个线程来处理该请求,该参数决定了应用服务同时可以处理多少个HTTP请 ...

  5. 优化之SpringBoot 内置tomcat 调优测试

    问题 怎么配置springBoot 内置tomcat,才能使得自己的服务效率更高呢? 基础配置 Spring Boot 能支持的最大并发量主要看其对Tomcat的设置,可以在配置文件中对其进行更改.我 ...

  6. SpringBoot内置Tomcat启动不了的原因

    SpringBoot内置Tomcat启动不了的原因: 1.需要加入spring-boot-starter-web依赖 [web中集成了tomcat.dispatcherServlet.xml-] &l ...

  7. SpringBoot 内置 Tomcat 线程数优化配置,你学会了吗?

    前言 本文解析springboot内置tomcat调优并发线程数的一些参数,并结合源码进行分析 参数 线程池核心线程数 server.tomcat.min-spare-threads:该参数为tomc ...

  8. SpringBoot内置tomcat启动原理

    前言 不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的 ...

  9. 访问tomcat服务器文件路径,外置tomcat映射服务器路径以及springboot内置tomcat映射路径配置...

    外置tomcat映射路径 在tomcat里的conf下的server.xml里Host标签下加入 其中的docBase就是磁盘映射路径,path为访问路径,比如localhost:8080/repor ...

最新文章

  1. 李飞飞高徒新项目,一眼看穿你下届总统会选谁!
  2. 科学家都解决不了的5个“简单”算法,你不来看看?
  3. zabbix监控多台站点服务器
  4. ITK:相互信息仿射
  5. Python集合(set)类型的操作
  6. React-Native 组件开发方法
  7. 判断浏览器 插件 jquery.ua.js
  8. TypeScript--函数
  9. chrome插件系列一:Secure Shell(替代ssh客户端)
  10. C语言:百鸡百钱问题
  11. jQuery中绑定事件的命名空间详解
  12. 文件缓存、内存缓存与静态化页面的取舍
  13. DDD实战进阶第一波(一):开发一般业务的大健康行业直销系统(概述)
  14. JAVA命令行运行时设置参数
  15. 饥荒联机版Mod开发——制作简单的物品(三)
  16. python应对反爬虫策略_python解决网站的反爬虫策略总结
  17. 在线协同编辑excel系统
  18. qpython 3h和oh_**python中的类和他的成员
  19. 袋鼠云春季生长大会圆满落幕,带来数实融合下的新产品、新方案、新实践
  20. 基于GMap.NET地图下载器的开发和研究

热门文章

  1. 四大只招STEM学生? 30%金融精英将被AI取代...华尔街真的失守了吗?
  2. 一个资深程序猿对Python的总结
  3. html制作一张网页的素材,帮人做一个简单的HTML页面
  4. PayPal注册申请详解
  5. 进程管道:pipe调用
  6. WUSTOJ 1279: Wallace and His Pet(Java)
  7. 实战演习Windows XP远程桌面连接
  8. mac book中js如何识别command键
  9. git绿色、红色图标不显示
  10. Python数据结构——二叉树排序