ServerConfiguration.java
package sprout.server;
import sprout.beans.annotation.Bean;
import sprout.beans.annotation.Configuration;
import sprout.config.AppConfig;
import sprout.context.BeanFactory;
import sprout.context.ContextPropagator;
import sprout.mvc.dispatcher.RequestDispatcher;
import sprout.mvc.http.parser.HttpRequestParser;
import sprout.server.builtins.BioHttpProtocolHandler;
import sprout.server.builtins.NioHttpProtocolHandler;
import sprout.server.builtins.RequestExecutorPoolService;
import sprout.server.builtins.VirtualRequestExecutorService;
import java.util.List;
import java.util.concurrent.ExecutorService;
@Configuration
public class ServerConfiguration {
@Bean
public RequestExecutorService executorService(AppConfig appConfig, List<ContextPropagator> contextPropagators) {
String threadType = appConfig.getStringProperty("server.thread-type", "virtual");
if (threadType.equals("virtual")) {
return new VirtualRequestExecutorService(contextPropagators);
}
return new RequestExecutorPoolService(appConfig.getIntProperty("server.thread-pool-size", 100));
}
@Bean
public AcceptableProtocolHandler httpProtocolHandler(AppConfig appConfig, RequestDispatcher requestDispatcher, HttpRequestParser httpRequestParser, RequestExecutorService executorService) {
String executionMode = appConfig.getStringProperty("server.execution-mode", "hybrid");
if (executionMode.equals("hybrid")) {
System.out.println("Execution mode is hybrid");
return new BioHttpProtocolHandler(requestDispatcher, httpRequestParser, executorService);
}
System.out.println("Execution mode is NIO");
return new NioHttpProtocolHandler(requestDispatcher, httpRequestParser, executorService);
}
}