Skip to content

Provide the same customisation options for Reactive Web Servers as Servlet Web Servers #9572

Closed
@jhaeyaert

Description

@jhaeyaert

Hi,

I currently testing Spring Boot 2.0.0.M2 and I was wondering how to customize Jetty Server with JettyReactiveWebServerFactory ?

With previous version I used JettyServletWebServerFactory which allowed to add Jetty Customizers. I was able to customize port, thread pool size and Jetty behaviour like remove ServerVersion Http header, enable Jetty request logging and so on. Ex :

    @Bean
    public ConfigurableServletWebServerFactory webServerFactory(BeanFactory beanFactory) {
        JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
        factory.setPort(8080);

        final QueuedThreadPool threadPool = new QueuedThreadPool(applicationConfig.getServerMaxThreads(), applicationConfig.getServerMinThreads(),
                applicationConfig.getServerIdleTimeout(), new BlockingArrayQueue<>(100, 100));

        threadPool.setName("http");
        factory.setThreadPool(threadPool);

        // Add customized Jetty configuration
        factory.addServerCustomizers(new JettyServerCustomizer[]{(JettyServerCustomizer) server -> {
            ServerConnector httpConnector = (ServerConnector) server.getConnectors()[0];

            // Remove non necessary headers (Server, X-Powered-By and Date).
            HttpConfiguration httpConfiguration = httpConnector.getConnectionFactory(HttpConnectionFactory.class).getHttpConfiguration();
            httpConfiguration.setSendServerVersion(false);
            httpConfiguration.setSendXPoweredBy(false);
            httpConfiguration.setSendDateHeader(false);
            server.addConnector(httpConnector);
...
}

With the reactive version, I still can configure port and pool but I can't found how to customize other specific setting of Jetty server such as enabling logging of requests or disable some headers

	@Bean
	public JettyReactiveWebServerFactory webServerFactory(BeanFactory beanFactory) {
		JettyReactiveWebServerFactory factory = new JettyReactiveWebServerFactory();
		factory.setPort(8080);

        	final QueuedThreadPool threadPool = new QueuedThreadPool(applicationConfig.getServerMaxThreads(), applicationConfig.getServerMinThreads(),
                applicationConfig.getServerIdleTimeout(), new BlockingArrayQueue<>(100, 100));

        	threadPool.setName("http");
        	factory.setThreadPool(threadPool);

        	// :-( Not available on reactive version : factory.addServerCustomizers(...)

		return factory;
	}

Is it intentional ? Is there any kind of limitation concerning customization of Jetty when using the reactive version ?

Thank in advance for your help.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions