Dev Study
← Spring コース

42. Spring Boot の登場

2012年10月17日、 にレスな構成への対応を求める issue(Jira の SPR-9888、今の GitHub #14521)が立ちました。 や の構造などを学習の坂として挙げ、 から起動した にを埋め込む形を提案しています。2013年8月6日、Phil Webb はこれが の発端だとコメントしました。

反転したのは入れ物と中身の関係です。以前はサーバを先に立て、アプリを WAR として入れていました。Spring Boot ではアプリが main を持ち、サーブレットコンテナのほうがアプリに組み込まれます。 で起動するので、形は Node のサーバに近づきます。1.0 は2014年4月1日。告知は、管理や台数を増やす仕組みは (アプリを載せれば動かしてくれるクラウド基盤)の側が既に持つことを理由に挙げました。

版を読むときの目印は から への改名です。2019年5月、javax という名前空間は の側では変更できないという合意が公表され、Jakarta EE 9(2020年)で jakarta に移りました。理由は技術ではなく商標と名前空間の権利です。Spring Boot は 3.0(2022年11月24日)でこちらへ移り、Java 17 が最低要件になりました。

点線の付いた語はタップすると説明が出ます。用語集を開く →

入れ物と中身の反転
それまで: Tomcat を先に起動main はサーバの側にある
Spring Boot: java -jar で起動main はアプリの側にある
中に入れられるもの
アプリ(WAR)web.xml・WEB-INF・コンテキストパス
サーブレットコンテナ組み込みの Tomcat など
  • ・発端の issue は2012年10月17日、最初のマイルストーン公開は2013年8月6日、1.0 は2014年4月1日です
  • ・Spring Boot は当初から WAR として置く使い方も残しています(現行リファレンスにも or more traditional war deployments とあります)
  • ・現行の Spring Boot 4.1.1 は Java 17 以上を要求し、組み込みの Tomcat は 11.0.x(Servlet 6.1)です

サンプルコード(フレームワーク環境が必要なため表示のみ)

// Spring Boot のアプリは main を持つ。
// 現行リファレンス(表示版 4.1.1)に載っている最小の形を、名前を変えて書いたもの
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class HelloApplication {
    @RequestMapping("/")
    String home() {
        return "hello from boot";
    }

    public static void main(String[] args) {
        // ここから Spring のコンテナが起動し、その中で組み込みの Tomcat が立ち上がる
        SpringApplication.run(HelloApplication.class, args);
    }
}

// Servlet の回の HelloServlet との違い
//   HelloServlet     : main が無い。先に起動した Tomcat が WAR を読み込んで呼ぶ
//   HelloApplication : main がある。web.xml も WAR も書いていない
// run の中で何が起きているかは、後のレッスンで扱います

図やコードに出てくる用語(タップで説明)

サンプルコードで身につける(5本) →

学んだ概念を、素朴な例から実務寄りの例まで5つの具体例で確認します。

公式ドキュメントで詳しく ↗