springboot 嵌入式 tomcat自定义配置
2018-01-09 16:20
375 查看
springboot内置了tomcat,如果我们有自定义需求该怎么做呢?
配置EmbeddedServletContainerFactory@Bean public EmbeddedServletContainerFactory embeddedServletContainerFactory() { TomcatEmbeddedServletContainerFactory embeddedServletContainerFactory = new TomcatEmbeddedServletContainerFactory(); embeddedServletContainerFactory.setPort(80); embeddedServletContainerFactory.setDisplayName("嵌入式tomcat测试"); embeddedServletContainerFactory.setSessionTimeout(30, TimeUnit.SECONDS); return embeddedServletContainerFactory; }
通过分析 EmbeddedWebApplicationContext 类得知:
private void createEmbeddedServletContainer() { EmbeddedServletContainer localContainer = this.embeddedServletContainer; ServletContext localServletContext = getServletContext(); if (localContainer == null && localServletContext == null) { EmbeddedServletContainerFactory containerFactory = getEmbeddedServletContainerFactory(); this.embeddedServletContainer = containerFactory .getEmbeddedServletContainer(getSelfInitializer()); } else if (localServletContext != null) { try { getSelfInitializer().onStartup(localServletContext); } catch (ServletException ex) { throw new ApplicationContextException("Cannot initialize servlet context", ex); } } initPropertySources(); }
springboot 会通过EmbeddedServletContainerFactory类来创建servlet容器,所以我们可以配置该Bean来达到自定义的效果,需要注意的是,通过该类自定义的配置会被自定义的配置所覆盖,列如application.properties 里的参数可以覆盖这里的配置
配置 EmbeddedServletContainerCustomizer
@Bean public EmbeddedServletContainerCustomizer containerCustomizer(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) { return new EmbeddedServletContainerCustomizer(){ public void customize(ConfigurableEmbeddedServletContainer container) { container.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/error/500")); container.addErrorPages(new ErrorPage(HttpStatus.BAD_GATEWAY, "/error/500")); container.setDisplayName("ABC"); container.setPort(9999); } }; }
springboot里面有这样一个类
EmbeddedServletContainerCustomizerBeanPostProcessor,
查看该类继承层次
public class EmbeddedServletContainerCustomizerBeanPostProcessor
implements BeanPostProcessor, ApplicationContextAware,再看看下面这个方法
@Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof ConfigurableEmbeddedServletContainer) { postProcessBeforeInitialization((ConfigurableEmbeddedServletContainer) bean); } return bean; }
由此得知,springboot会在servlet容器初始化时通过EmbeddedServletContainerCustomizerBeanPostProcessor类对容器做自定义修改,值得注意的是,这里的修改不会被配置文件里的配置所覆盖
相关文章推荐
- springboot项目 打成war包 使用自定义tomcat配置
- 知识点①:springboot 使用外部 tomcat 运行配置
- Spring Boot 自动配置理解 以及实现自定义Starter
- springboot启动嵌入式tomcat报错找不到jar包,关键字:FileNotFoundException,derbyLocale_cs.jar,StandardJarScanner.scan
- spring boot使用自定义配置的线程池执行Async异步任务
- 携程 Apollo 配置中心 | 学习笔记(三) 自定义Spring Boot项目通过配置中心启动项目
- Spring boot之读取自定义配置文件
- spring boot内嵌tomcat配置端口更改
- SpringBoot如何导入自定义配置的yml文件
- SpringBoot入门之内嵌Tomcat配置
- springboot tomcat的配置选项大全
- spring-boot @Async 的使用、自定义Executor的配置方法
- spring boot 自定义加载tomcat
- Springboot 之 自定义配置文件及读取配置文件
- Spring Boot自定义配置
- spring boot内嵌tomcat配置端口更改
- spring boot内嵌tomcat配置端口更改
- springBoot使用Controller读取配置文件两种方式&读取自定义配置方法
- SpringBoot如何导入自定义配置的yml文件
- SpringBoot之配置嵌入式Servlet容器