SpringBoot的定制和优化内嵌的Tomcat
在一台机器上想要部署多个boot应用的话:启动web项目的时候默认占用的端口是8080端口,但是不想用这个端口的话,这时就可以去定制它:
1、通过属性的配置文件来配置:在源代码中有一个服务的配置文件:ServerProperties,它的前缀是以server开始的。可以指定http的端口,可以绑定它的ip地址,可以指定错误的信息的配置,还可以指定header,ssl,tomcat,jetty,http2等等。
例如改下端口号和绑定ip地址如下:
现在再次运行项目的话:所以绑定的时候只能固定这个地址访问了。
注意:在属性的配置文件里面配置不了tomcat的协议,比如tomcat默认是使用bio的协议的,但是我想要配置nio的话在配置文件里面是配置不了的,通过下面的方式是可以的。
2、实现WebServerFactoryCustomizer<ConfigurableServletWebServerFactory>,代码如下:
package com.boot.tomcat.demo.boottomcat.config;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
@Component
public class TomcatConfiguration implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
System.out.println("-------------------");
}
}
当运行项目的时候:会把customize这个方法给自动执行了。
然后可以在这个方法里面设置http请求的端口和访问项目的上下文路径,代码如下:
package com.boot.tomcat.demo.boottomcat.config;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.stereotype.Component;
@Component
public class TomcatConfiguration implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
@Override
public void customize(ConfigurableServletWebServerFactory factory) {
System.out.println("-------------------");
factory.setContextPath("/demo");
factory.setPort(8090);
}
}
启动下项目:这种配置的优先级会比在配置文件的优先级要高一些。
一般在这个配置文件里配置了就不会在属性配置文件里再配置了tomcat的优化了。
如果想要设定协议的话,需要绑定TomcatServletWebServerFactory,代码如下,在这个里面还可以创建连接器,连接器的默认的端口是8443。
package com.boot.tomcat.demo.boottomcat.config;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;
@Component
public class TomcatConfiguration implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.setContextPath("/demo");
factory.setPort(8090);
//这个是设置nio的协议
factory.setProtocol("org.apache.coyote.http11.Http11NioProtocol");
}
}
然后看下源代码:
这个AbstractServletWebServerFactory类里面还可以支持两个服务器的除了Tomcat服务器。就是说除了用tomcat启动项目还可以使用jetty服务器的方式去启动项目,这三个服务器都是web的服务器。Boot只是内置了tomcat的服务器。
jetty的服务器要比tomcat处理的并发能力要高很多。
总结:上面是一些关于内置tomcat的一些简单的配置和优化,后面会详细写tomcat的优化。