Spring Boot Web with Undertow

Although Tomcat is the most common application server it also tends to add some overhead to a small microservice. Lets have a look at the alternatives.

Tomcat Alternatives

There are at least 2 alternatives to Tomcat for a Spring Boot Web application server: Jetty and Undertow. In this blog, I use Undertow because

  • it is leightweight (< 1Mb)
  • it has Servlet 3.1 support
  • it offers Web sockets

Replace Tomcat

In the following example I will show you that only 2 changes are necessary to replace the default Tomcat:

  1. Add the Undertow dependency
  2. Exclude Tomcat from the spring-boot-we
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</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>

Undertow settings

An additional advantage of using Spring Boot is the configuration by using Spring configuration files. Here is an example application.yml with some server settings:

server:
  port: 8080
  undertow:
    ioThreads: 16
    workerThreads: 150
    accesslog:
      enabled: true
  compression:
    enabled: true
    mimeTypes: text/xml, text/css, text/html, application/json
    minResponseSize: 4096

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.