一、内嵌web容器

  参看http://www.cnblogs.com/bjlhx/p/8372584.html

  查看源码可知提供以下三种:

    

二、定制优化tomcat

2.1、配置文件配置

  通过application.properties配置tomcat

  端口配置:server.port=10001
  地址配置:server.adress=192.168.1.1

     通过ServerProperties查看到tomcat变量,进入即可配置,如下

  启用日志配置:

server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=d:/logs

  原理分析  

  在spring-boot-autoconfigure-1.5.9.RELEASE.jar包中的org.springframework.boot.autoconfigure.web.ServerProperties查看

  可以查看到以上所示属性

2.2、通过代码方式配置一-实现EmbeddedServletContainerCustomizer接口

  EmbeddedServletContainerCustomizer→三个具体默认实现

    

  1》代码方式自定义

  定义一个类MyEmbeddedServletContainerCustomizer实现EmbeddedServletContainerCustomizer接口,即可

  设置基本配置

@Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.out.println(container.getClass());
TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container;
factory.setPort(8181);
factory.setBaseDirectory(new File("d:/tmp/tomcat"));
}
}

  设置日志

package com.lhx.spring.springboot_web;

import java.io.File;

import org.apache.catalina.valves.AccessLogValve;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.stereotype.Component; @Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.out.println(container.getClass());
TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container;
factory.setPort(8181);
factory.setBaseDirectory(new File("d:/tmp/tomcat")); factory.addContextValves(getAccessLogValve());
} private AccessLogValve getAccessLogValve() {
AccessLogValve log = new AccessLogValve();
log.setDirectory("d:/tmp/logs");
log.setEnabled(true);
log.setPattern("common");
log.setPrefix("spring-boot-lhx-access-log");
log.setSuffix(".txt");
return log; }
}

  设置连接数配置、最大线程

package com.lhx.spring.springboot_web;

import java.io.File;

import org.apache.catalina.connector.Connector;
import org.apache.catalina.valves.AccessLogValve;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.stereotype.Component; @Component
public class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override
public void customize(ConfigurableEmbeddedServletContainer container) {
System.out.println(container.getClass());
TomcatEmbeddedServletContainerFactory factory =(TomcatEmbeddedServletContainerFactory)container;
factory.setPort(8181);
factory.setBaseDirectory(new File("d:/tmp/tomcat")); factory.addContextValves(getAccessLogValve()); factory.addConnectorCustomizers(new MyTomcatConnectorCustomizers());
} private AccessLogValve getAccessLogValve() {
AccessLogValve log = new AccessLogValve();
log.setDirectory("d:/tmp/logs");
log.setEnabled(true);
log.setPattern("common");
log.setPrefix("spring-boot-lhx-access-log");
log.setSuffix(".txt");
return log;
} }
class MyTomcatConnectorCustomizers implements TomcatConnectorCustomizer{ @Override
public void customize(Connector connector) {
Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();
protocol.setMaxConnections(2000);
protocol.setMaxThreads(500);
}
}

2.5、通过代码方式配置二-默认配置类方式

package com.lhx.spring.springboot_web;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus; @SpringBootConfiguration
public class WebServletConfiguration {
@Bean
public EmbeddedServletContainerFactory createEmbeddedServletContainerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.setPort(1008);
factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"));
return factory;
}
}

  添加初始化

        factory.addInitializers((servletContext)->{
System.out.println("----------servletContext startup----------");
});

  此时可以获取到servletContext信息,可以进行添加Filter、设置Attribute等

  源码地址:https://github.com/bjlhx15/spring-boot.git

015-Spring Boot 定制和优化内嵌的Tomcat的更多相关文章

  1. Spring Boot 定制与优化内置的Tomcat容器

    1.Spring Boot定制与优化内置Tomcat容器. > 内置的容器有三个分别是Undertow.Jetty.Tomcat,Spring Boot 对这三个容器分别进行了实现,它们上层接口 ...

  2. 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  3. SpringBoot优化内嵌的Tomcat

    SpringBoot测试版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId ...

  4. SpringBoot优化内嵌的Tomcat ---设置MaxConnections

    使用kill -9杀掉springboot应用后,立马java -jar重启,会报错,需要等待一段时间才能启动成功,报错的原因是:/tmp/tomcat-docbase.474979491043437 ...

  5. SpringBoot 优化内嵌的Tomcat

    在通过SpringBoot调用其它服务时,报错 org.springframework.web.client.ResourceAccessException: I/O error on POST re ...

  6. Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现

    Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现 Anoyi 精讲JAVA 精讲JAVA 微信号 toooooooozi 功能介绍 讲解java深层次 ...

  7. Spring data mongodb 聚合,投射,内嵌数组文档分页.

    尽量别直接用 DBObject  ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...

  8. 我的Spring Boot学习记录(二):Tomcat Server以及Spring MVC的上下文问题

    Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以 ...

  9. spring boot定制Jackson ObjectMapper,为什么不生效

    先说结论: 项目中定制了spring 的redisTemplate,而这个template没有使用我自定义的Jackson ObjectMapper.所以不生效. 下面是详细过程: 起因是spring ...

随机推荐

  1. [Git] 003 初识 Git 与 GitHub 之加入文件 第二弹

    在 GitHub 的 UI 界面使用 Git 往仓库里加文件 第二弹 1. 选择已有的文件,点击右侧的 edit 2. 在文件中继续写入文字 小发现:我只写到第 6 行,commit 后再点进去,发现 ...

  2. Storm简介——初始Storm

    一.什么是Storm Strom是由Twitter开源的类似于Hadoop的实时数据处理框架.Strom是分布式流式数据处理系统,强大的分布式集群管理.便捷的针对流式数据的编程模型.高容错保障这些都是 ...

  3. Solr的学习使用之(五)添加索引数据

    1.创建SolrServer类 SolrServer类:提供与Solr实例的连接与通信. 往Solr里添加索引数据,据说有好几种办法,这边利用SolrJ操作solr API完成index操作,具体So ...

  4. 88-基于FMC接口的2路CameraLink Base输入子卡模块

    基于FMC接口的2路CameraLink Base输入子卡模块 1.板卡概述 FMC连接器是一种高速多pin的互连器件,广泛应用于板卡对接的设备中,特别是在xilinx公司的所有开发板中都使用.该Ca ...

  5. 2019南京网赛 The beautiful values of the palace(思维,树状数组

    https://nanti.jisuanke.com/t/41298 题意:给一个n * n的螺旋矩阵,n保证是奇数,取一些点使其.获得价值,价值为数位和,然后再给q次查询,求矩阵中的价值总和 思路: ...

  6. Java数组重修,猜数小游戏改进和打印正三角形

    数组重修,猜数小游戏 要求:从键盘输入一个数,判断数组是否包含此数,运用随机数 我们可能会这样写 import java.util.Random; import java.util.Scanner; ...

  7. Linux命令行工具之pidstat命令

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484624.html pidstat命令就可以帮助我们监测到具体线程的上下文切换 通过pidstat ...

  8. [洛谷 P1013] NOIP1998 提高组 进制位

    问题描述 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如: L K V E L L K V E K K V E KL V V E KL KK E E K ...

  9. UVA 11178 Morley's Theorem (计算几何)

    题目链接 lrj训练指南 P259 //==================================================================== Point getP( ...

  10. python网络编程之验证客户端链接的合法性

    六.socket的更多方法介绍 服务端套接字函数s.bind() 绑定(主机,端口号)到套接字s.listen() 开始TCP监听s.accept() b被动接收TCP客户的连接,(阻塞式)等待连接的 ...