/* * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.springframework.boot.web.embedded.undertow; import io.undertow.Undertow; import org.springframework.boot.web.reactive.server.AbstractReactiveWebServerFactory; import org.springframework.boot.web.reactive.server.ReactiveWebServerFactory; import org.springframework.boot.web.server.WebServer; import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.UndertowHttpHandlerAdapter; /** * {@link ReactiveWebServerFactory} that can be used to create {@link UndertowWebServer}s. * * @author Brian Clozel * @since 2.0.0 */ public class UndertowReactiveWebServerFactory extends AbstractReactiveWebServerFactory { private Integer bufferSize; private Integer ioThreads; private Integer workerThreads; private Boolean directBuffers; /** * Create a new {@link UndertowReactiveWebServerFactory} instance. */ public UndertowReactiveWebServerFactory() { } /** * Create a new {@link UndertowReactiveWebServerFactory} that listens for requests * using the specified port. * @param port the port to listen on */ public UndertowReactiveWebServerFactory(int port) { super(port); } @Override public WebServer getWebServer(HttpHandler httpHandler) { Undertow.Builder builder = createBuilder(getPort()); UndertowHttpHandlerAdapter handler = new UndertowHttpHandlerAdapter(httpHandler); builder.setHandler(handler); return new UndertowWebServer(builder, getPort() >= 0); } private Undertow.Builder createBuilder(int port) { Undertow.Builder builder = Undertow.builder(); if (this.bufferSize != null) { builder.setBufferSize(this.bufferSize); } if (this.ioThreads != null) { builder.setIoThreads(this.ioThreads); } if (this.workerThreads != null) { builder.setWorkerThreads(this.workerThreads); } if (this.directBuffers != null) { builder.setDirectBuffers(this.directBuffers); } builder.addHttpListener(port, getListenAddress()); return builder; } private String getListenAddress() { if (getAddress() == null) { return "0.0.0.0"; } return getAddress().getHostAddress(); } public void setBufferSize(Integer bufferSize) { this.bufferSize = bufferSize; } public void setIoThreads(Integer ioThreads) { this.ioThreads = ioThreads; } public void setWorkerThreads(Integer workerThreads) { this.workerThreads = workerThreads; } public void setDirectBuffers(Boolean directBuffers) { this.directBuffers = directBuffers; } }