一、内嵌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. java二周的学习总结

    一转眼二周就过去了,个人觉得虽然java和C语言有差异,但差别并不大,因为语法语句方面都是差不多的,因为我上个学期并没有很认真的学好C语言,所以我这个学期更希望学好java,java方面还是挺有趣的, ...

  2. Vue 基础 day04

    什么是路由 后端路由: 对于普通的网站,所有的超链接都是URL地址,所有的URL地址都对应服务器的资源: 前端路由: 对于单页面应用程序来说,主要是通过URL中的hash(#)来实现不同页面之间的跳转 ...

  3. idea 社区版本创建javaweb项目 使用jetty

    idea社区版本 创建javaweb项目后使用jetty启动 <dependencies> <dependency> <groupId>javax.servlet& ...

  4. Bootstrap selectpicker 强制向下

    selectpicker的方向是自适应的,但是有些界面,我们需要强制向下,可以使用属性data-dropup-auto data-dropup-auto="false" 官网上的o ...

  5. Balanced Lineup poj3264 线段树

    Balanced Lineup poj3264 线段树 题意 一串数,求出某个区间的最大值和最小值之间的差 解题思路 使用线段树,来维护最大值和最小值,使用两个查询函数,一个查区间最大值,一个查区间最 ...

  6. Codeforces 1159E Permutation recovery(构造+拓扑)

    这道题其实只要解决了什么时候输出 -1 ,那么此题的构造方法也就解决了.首先我们可以观察这组 3 3 4 和 3 4 4 ,可以算出第二组是不成立的,在观察一组 2 3 4 5 和  3 2 4 5 ...

  7. 关于 Python 程序的运行方面,有什么手段能提升性能?

    1.使用多进程,充分利用机器的多核性能2.对于性能影响较大的部分代码,可以使用 C 或 C++编写3.对于 IO 阻塞造成的性能影响,可以使用 IO 多路复用来解决4.尽量使用 Python 的内建函 ...

  8. asp.net Base64加解密

    1.前端 JS: /* * base64.js * * Licensed under the BSD 3-Clause License. * http://opensource.org/license ...

  9. (一)WebPack4.0 从零开始

    一:WebPack基础知识 (1):webpack的定义 webpack官网给出的定义是:webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler). ...

  10. 用URLGather来管理和保存你的页面

    下载链接:http://url-gather.software.informer.com/download/#downloading 安装的过程简单,这里不一一叙述. 安装成功后,找到软件安装的路径, ...