亲宝软件园·资讯

展开

SpringBoot嵌入式Web容器

刘婉晴 人气:0

嵌入式 Web 容器:应用中内置服务器(Tomcat),不用在外部配置服务器了

原理

ServletWebServerFactoryConfiguration.class

	@Override
	public WebServer getWebServer(ServletContextInitializer... initializers) {
		if (this.disableMBeanRegistry) {
			Registry.disableRegistry();
		}
		Tomcat tomcat = new Tomcat();
		File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir("tomcat");
		tomcat.setBaseDir(baseDir.getAbsolutePath());
		Connector connector = new Connector(this.protocol);
		connector.setThrowOnFailure(true);
		tomcat.getService().addConnector(connector);
		customizeConnector(connector);
		tomcat.setConnector(connector);
		tomcat.getHost().setAutoDeploy(false);
		configureEngine(tomcat.getEngine());
		for (Connector additionalConnector : this.additionalTomcatConnectors) {
			tomcat.getService().addConnector(additionalConnector);
		}
		prepareContext(tomcat.getHost(), initializers);
		return getTomcatWebServer(tomcat);
	}

总结: 所谓内嵌服务器,就是把我们手动启动服务器的方法放进框架中了。

应用

1. 切换Web服务器

排除 tomcat 服务器,导入 undertow 依赖

       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

2. 定制服务器规则

方法一: 修改 server 下的配置文件

ServerProperties.class

server.undertow.accesslog.dir=/tmp

方法二: 自定义 ConfigurableServletWebServerFactory

方法三: 自定义 ServletWebServerFactoryCustomizer 定制化器

作用: 将配置文件的值,与 ServletWebServerFactory 绑定

SpringBoot 设计: Customizer 定制化器,可以定制 XXX 规则

加载全部内容

相关教程
猜你喜欢
用户评论