有時候我們可能需要啟動不止一個SpringBoot,而SpringBoot默認的端口號是8080,所以這時候我們就需要修改SpringBoot的默認端口了。修改SpringBoot的默認端口有兩種方式。下面就分別說一下這兩種方式。
修改application.properties
第一種方式我們只需要在application.properties中加這樣的一句話就可以了:server.port=8004。為什么這種方式可以實現修改SpringBoot的默認端口呢?因為在SpringBoot中有這樣的一個類:ServerProperties。我們可以大致看一下這個類:
- @ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
- public class ServerProperties
- implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered {
- /**
- * Server HTTP port.
- */
- private Integer port;
在這個類里有一個@ConfigurationProperties注解,這個注解會讀取SpringBoot的默認配置文件application.properties的值注入到bean里。這里定義了一個server的前綴和一個port字段,所以在SpringBoot啟動的時候會從application.properties讀取到server.port的值。我們接着往下看一下:
- @Override
- public void customize(ConfigurableEmbeddedServletContainer container) {
- if (getPort() != null) {
- container.setPort(getPort());
- }
這里有一個customize的方法,這個方法里會給SpringBoot設置讀取到的端口號。
實現EmbeddedServletContainerCustomizer
- @RestController
- @EnableAutoConfiguration
- @ComponentScan
- public class FirstExample implements EmbeddedServletContainerCustomizer {
- @RequestMapping("/first.do")
- String home() {
- return "Hello World!世界你好";
- }
- public static void main(String[] args) {
- SpringApplication.run(FirstExample.class, args);
- }
- @Override
- public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
- configurableEmbeddedServletContainer.setPort(8003);
- }
- }
springboot中默認可以通過配置如下參數設置內嵌容器Tomcat的端口,最大線程數等等
server.port=8081 server.tomcat.max-threads=1000
但是,無法設置最大連接數,而最大連接數直接影響到Tomcat的性能,如何調整這個最大連接數呢?
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.boot.context.embedded.EmbeddedServletContainer;
import org.springframework.boot.context.embedded.ServletContextInitializer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.stereotype.Component;
@Component()
public class MyEmbeddedServletContainerFactory extends TomcatEmbeddedServletContainerFactory
{
public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... initializers)
{
//設置端口
this.setPort(8081);
return super.getEmbeddedServletContainer(initializers);
}
protected void customizeConnector(Connector connector)
{
super.customizeConnector(connector);
Http11NioProtocol protocol = (Http11NioProtocol)connector.getProtocolHandler();
//設置最大連接數
protocol.setMaxConnections(2000);
//設置最大線程數
protocol.setMaxThreads(2000);
protocol.setConnectionTimeout(30000);
}
}
??最大連接數和最大線程數區別??
使用命令行參數
使用虛擬機參數
設置超時時間
在啟動類中
@Bean
private EmbeddedServletContainerCustomizer containerCustomizer(){
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
container.setSessionTimeout(1800);//單位為S
}
};
}