yu-tarrrrの日記

完全に個人の趣味でその時々書きたいことを書く

Spring Bootのサーブレットコンテナを変更する

はじめに

  • 今回はSpring BootでAPIを実装する際にサーブレットコンテナを変更したいと思って調べたので、その内容をtips的にまとめておきます

 

そもそも

サーブレットコンテナなにがあるの??

Tomcat

  • Java書いてれば一度は遭遇してるはず
  • Springのデフォルトのサーブレットコンテナというわけもあり、圧倒的なシェアを誇ってるようです。
  • Apache

Jetty

  • 実は Tomcat よりも歴史の古いサーバー
  • Tomcatより軽量で起動は早いです
  • eclipse

WebLogic/GlassFish

JBoss/WildFly/Undertow

WebSphere/LibertyProfile

  • IBM
  • WebSphereが商用

実装してみる

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.2.2.RELEASE"
    id("io.spring.dependency-management") version "1.0.8.RELEASE"
    kotlin("jvm") version "1.3.61"
    kotlin("plugin.spring") version "1.3.61"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web") {
    }
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    testImplementation("org.springframework.boot:spring-boot-starter-test") {
        exclude(group = "org.junit.vintage", module = "junit-vintage-engine")
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "1.8"
    }
}

デフォルトの設定だと、こんな感じになっていると思います。 spring-boot-starter-webは何も指定しないと、Tomcatが立ち上がります。 f:id:yu-tarrrr:20191214134927p:plain

  • これをJettyに変更してみます
dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web") {
        exclude(group = "org.springframework.boot", module = "spring-boot-starter-tomcat")
    }
    implementation("org.springframework.boot:spring-boot-starter-jetty")
  • Jettyが立ち上がりました

f:id:yu-tarrrr:20191214135326p:plain

  • 同じ要領でUndertowを指定もできました

f:id:yu-tarrrr:20191214135846p:plain

  • 現在のところ、上記の3つのみSpringからは呼び出せるようです。

docs.spring.io

まとめ

  • Servlet Containerがせっかく選択できるので、ケースに合わせた選択をしたいですね