springBoot中修改嵌入式的servlet容器配置

我们可以通过如下两种方式修改servlet容器配置:
1、在springBoot的配置文件中修改

server.port=8081
#项目访问路径
server.context-path=/crud
​
server.tomcat.uri-encoding=UTF-8
​
#通用的Servlet容器设置
server.xxx
#Tomcat的设置
server.tomcat.xxx
2、编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的配置。
@Bean  //一定要将这个定制器加入到容器中
public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){
    return new EmbeddedServletContainerCustomizer() {//定制嵌入式的Servlet容器相关的规则
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {
            container.setPort(8083);
        }
    };
}

原理
1、springBoot默认的servlet容器
springBoot默认使用tomcat作为嵌入式的servlet容器
在这里插入图片描述
2、定制servlet容器相关配置
1、在springBoot配置文件中修改server开头的配置。
具体可以配置哪些项,我们可以打开ServerProperties类。

@ConfigurationProperties(prefix = "server", ignoreUnknownFields = true)
public class ServerProperties
		implements EmbeddedServletContainerCustomizer, EnvironmentAware, Ordered {

	/**
	 * Server HTTP port.
	 */
	private Integer port;

	/**
	 * Network address to which the server should bind to.
	 */
	private InetAddress address;

	/**
	 * Context path of the application.
	 */
	private String contextPath;

	/**
	 * Display name of the application.
	 */
	private String displayName = "application";
	private String servletPath = "/";

第一项就是我们熟知的port属性。里面还有一些其他的如contextPath,servletPath等。

2、编写一个EmbeddedServletContainerCustomizer
编写一个嵌入式的Servlet容器的定制器添加到容器中。

    @Bean
    public EmbeddedServletContainerCustomizer embeddedServletContainerCustomizer(){
        return new EmbeddedServletContainerCustomizer(){

            @Override
            public void customize(ConfigurableEmbeddedServletContainer container) {
                container.setPort(8080);
            }
        };
    }

	启动日志
重新启动springBoot项目,查看控制台,发现确实在8089端口启动了。

3、总结
上述两种方式虽然表面上看起来不同,但是实际上在底层一样的。我们可以打开ServerProperties ,可以看到它本生也是一个EmbeddedServletContainerCustomizer 。
在它的customize 方法中,也是通过ConfigurableEmbeddedServletContainer设置servlet容器配置的。

	@Override
	public void customize(ConfigurableEmbeddedServletContainer container) {
		if (getPort() != null) {
			container.setPort(getPort());
		}
		if (getAddress() != null) {
			container.setAddress(getAddress());
		}
		if (getContextPath() != null) {
			container.setContextPath(getContextPath());
		}
		if (getDisplayName() != null) {
			container.setDisplayName(getDisplayName());
		}
		if (getSession().getTimeout() != null) {
			container.setSessionTimeout(getSession().getTimeout());
		}
		//...
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值