Spring Boot – Configure Jetty Server

By default, Spring boot uses embedded tomcat server to run the application. At times, you may need to use jetty server in place of tomcat server. Spring Boot provides Tomcat and Jetty dependencies bundled together as separate starters to help make this process as easy as possible. You can use jetty with following simple steps.

Add spring-boot-starter-jetty dependency

You will need to update pom.xml and add dependency for spring-boot-starter-jetty. Also, you will need to exclude default added spring-boot-starter-tomcat dependency.

<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-jetty</artifactId>
</dependency>

In gradle, able change can be achieved by this:

configurations {
    compile.exclude module: "spring-boot-starter-tomcat"
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:2.0.0.BUILD-SNAPSHOT")
    compile("org.springframework.boot:spring-boot-starter-jetty:2.0.0.BUILD-SNAPSHOT")
}

Configure Jetty Options

To override, default jetty runtime configuration – you can configure them in application.properties file.

server.port=8080
server.servlet.context-path=/home

####Jetty specific properties########

server.jetty.acceptors= # Number of acceptor threads to use.
server.jetty.max-http-post-size=0 # Maximum size in bytes of the HTTP post or put content.
server.jetty.selectors= # Number of selector threads to use.

Also, you may configure these options programatically using JettyEmbeddedServletContainerFactory bean.

@Bean
public JettyEmbeddedServletContainerFactory  jettyEmbeddedServletContainerFactory() {
    JettyEmbeddedServletContainerFactory jettyContainer = 
    	new JettyEmbeddedServletContainerFactory();
     
    jettyContainer.setPort(9000);
    jettyContainer.setContextPath("/home");
    return jettyContainer;
}

Update for Spring boot 2.0.0.RELEASE

Above code snippet was valid for spring boot spanshot version. After Spring boot 2.0.0.RELEASE is available, you shall be using ConfigurableServletWebServerFactory and JettyServletWebServerFactory classes.

@Bean
public ConfigurableServletWebServerFactory webServerFactory() 
{
	JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
	factory.setPort(9000);
	factory.setContextPath("/myapp");
	factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, "/notfound.html"));
	return factory;
}

Drop me your questions in comments section related to using jetty in stead of tomcat server in any spring boot application.

Happy Learning !!

Ref: Configure Jetty

Was this post helpful?

Join 7000+ Awesome Developers

Get the latest updates from industry, awesome resources, blog updates and much more.

* We do not spam !!

6 thoughts on “Spring Boot – Configure Jetty Server”

  1. I am looking for a way to configure Jetty only to listen on 127.0.0.1.
    I found the option to be used within the “normal” jetty configuration, i.e. using jetty.http.host.

    Unfortunately I have not found a way to do this using the spring configuration file or programatically – any idea how to do this ?

    Reply
  2. Doesn’t seem to work with version 2.0.0.RELEASE. Gives error:

    Caused by: org.springframework.context.ApplicationContextException: Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean.

    Reply
    • This works in spring boot 2.0.0.RELEASE.

      @Bean
      public ConfigurableServletWebServerFactory webServerFactory() 
      {
      	JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
      	factory.setPort(9000);
      	factory.setContextPath(&quot;/myapp&quot;);
      	factory.addErrorPages(new ErrorPage(HttpStatus.NOT_FOUND, &quot;/notfound.html&quot;));
      	return factory;
      }
      
      Reply
  3. I have a spring boot application (version 2.0) reactive web one , i by defaultt have the tomcat connected , what should i do if need to connect to tomcat and another server say jetty at the same time by modifying the application.properties , say like if i choose tomcat it should start up with tomcat and other way around .?

    Reply

Leave a Comment

HowToDoInJava

A blog about Java and related technologies, the best practices, algorithms, and interview questions.