一、内嵌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

最新文章

  1. ./adb: cannot execute binary file:
  2. android提供ToolBar实现划动菜单的陷阱
  3. [HDOJ1231]最大连续子序列
  4. SQL开发技巧(二) 【转】感觉他写的很好
  5. 开发一个iOS应用没有那么容易
  6. JellyViewPager
  7. Ledongli
  8. SurfaceView的使用
  9. hdu 1159 Common Subsequence(LCS最长公共子序列)
  10. <runtime> 的 <assemblyBinding> 元素
  11. activity变成Dialog的样式设置
  12. TP3.2 配置最新的阿里大于sdk
  13. 201521123017 《Java程序设计》第12周学习总结
  14. C# 委托与事件详解(二)
  15. _future_用法总结
  16. dubbo源码分析3——SPI机制中的ExtensionLoader类的objectFactory属性分析
  17. 第三百九十四节,Django+Xadmin打造上线标准的在线教育平台—Xadmin后台进阶开发配置2,以及目录结构说明
  18. Flex中如何利用FocusManager类的setFocus函数设置TextInput的焦点的例子
  19. Eureka (数学组合 + 斜率)
  20. ElasticeSearch(五)分布式索引架构

热门文章

  1. Kali系统 metasploit 使用教程
  2. IDEA错误: 找不到或无法加载主类 com.xxx.freight.dofreight.doFreight解决办法
  3. MySQL语句之数据的增删改查
  4. express 设置允许跨域访问
  5. 基于谷歌开源的TensorFlow Object Detection API视频物体识别系统搭建自己的应用(四)
  6. layui隐藏表格列
  7. python常用模块学习3
  8. bzoj4408 [Fjoi 2016]神秘数 & bzoj4299 Codechef FRBSUM 主席树+二分+贪心
  9. php import require include use vendor
  10. 黑客已经瞄准5G网络,如何防止LTE网络攻击?