修改springboot内置tomcat

EmbeddedServletContainerCustomizer接口中的抽象方法有三个内置容器


public interface EmbeddedServletContainerCustomizer {

	/**
	 * Customize the specified {@link ConfigurableEmbeddedServletContainer}.
	 * @param container the container to customize
	 */
	void customize(ConfigurableEmbeddedServletContainer container);

}

我们想要在application.properties中修改tomcat一些配置时,可以参考ServerPropeties类

比如,修改端口号,设置绑定地址,开启日志,设置输出位置等等。

server.port=9090
server.address=192.1.11.111
server.tomcat.accesslog.enable=true
server.tomcat.accesslog.directory=e:/temps

本文以ServerProperties内Tomcat为例简要说明:

可以通过编写类来实现TomcatEmbeddedServerContainerFactory

package com.gcxzflgl;

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.http.HttpStatus;

//@Component
public class MyEmbeddedServlet implements EmbeddedServletContainerCustomizer {

	@Override
	public void customize(ConfigurableEmbeddedServletContainer container) {
		TomcatEmbeddedServletContainerFactory factory = (TomcatEmbeddedServletContainerFactory) container;
		//设置端口
		factory.setPort(10003);
		//设置工作记录目录
		factory.setBaseDirectory(new File("E:/temps"));
		//设置日志(并不是事实记录)
		factory.addEngineValves(getLogAccessLogValue());
		//设置连接数
		factory.addConnectorCustomizers(new MyTomcatConnectorCustomizer());
		//添加错误页面
		factory.addErrorPages(new org.springframework.boot.web.servlet.ErrorPage(HttpStatus.NOT_FOUND,"/404.html"));
		//初始化一些设置
		factory.addInitializers((servletContext ->{
			System.out.println("server start!");
		}));
	}
	
	
	private AccessLogValve getLogAccessLogValue() {
		AccessLogValve log = new AccessLogValve();
		//日志目录
		log.setDirectory("e:/temps");
		//开始日志
		log.setEnabled(true);
		//日志级别
		log.setPattern("common");
		//日志前缀
		log.setPrefix("springboot-access-log");
		//日志后缀
		log.setSuffix(".txt");
		return log;
	}
}
class MyTomcatConnectorCustomizer implements TomcatConnectorCustomizer{

	@Override
	public void customize(Connector connector) {
		Http11NioProtocol protocol=(Http11NioProtocol) connector.getProtocolHandler();
		//设置最大连接数
		protocol.setMaxConnections(2000);
		//设置最大线程数
		protocol.setMaxThreads(500);
	}
	
}

日志输出目录


以上只是列举简答的配置,具体可以根据需要定制自己的优化方案!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐