Spring Boot

Spring FrameworkとSpring Bootの比較

そもそもの話ですがSpring FrameworkというのはEJBがあまりにも複雑なのでもっと簡単にという事で生まれたアプリケーションフレームワークです。

主要な比較改善ポイント

2003年 Spring誕生 2014年 Spring Boot登場 現在 Spring Framework DI / IoC コンテナ 依存性の注入・Bean管理 AOP 横断的関心事の分離 Spring MVC Webアプリ基盤 課題 膨大なXML設定ファイル 複雑な依存関係管理 改善 Spring Boot Auto Configuration 設定の自動化・ゼロ設定 Starter 依存関係 一括インポートで簡単設定 組み込みサーバー Tomcat内蔵・即起動可能 メリット すぐに開発開始できる 設定よりも規約(CoC) Spring Boot は Spring の上に構築されたもの。Springの機能はそのまま使える

CoCとは「Convention over Configuration」の略で、日本語だと「設定より規約」です。考え方はシンプルで、「普通はこうするよね」という決まりごとに従えば、設定を書かなくていいという思想らしいです。

今もSpringを選ぶ意味はあるか

基本的にはない、と言えます。理由は Spring Boot が Spring の「上位互換」だからです。Spring の全機能は Spring Boot でも使えます。ただし現場では以下のような理由でSpring Boot化ができないところもあります。

  • 超レガシーな既存プロジェクトでSpringのみを使っているなら、あえてSpring Bootに移行するコストがかかる
  • 非常に特殊なサーバー環境(古いJava EEコンテナへのデプロイが必須など)で組み込みサーバーが邪魔になる場合(Javaのバージョン的に対応できない)

実務の新規開発では、Spring Bootを選ばない理由はほぼないというのが現在のコンセンサスだとおもいます。

「組み込みサーバー型 vs 共有サーバー型」アーキテクチャ対比

「1つのサーバーに複数アプリを同居させる」という昔からの運用スタイルに対し、最近(とはいっても随分久しいと思う)のコンテナ時代ではTomcatも含めて1アプリとなります。こうする事でOSからみると1アプリ1プロセスとなり、メモリやCPUの割り当てが柔軟になります。それに対し、複数のアプリが1プロセスで動作する従来の方法では、アプリAがメモリを食いつぶして他のアプリに影響を与えたり、致命的なエラーを出した場合アプリが全滅というような危険もありました。

従来型:共有Tomcat Tomcat(1台) アプリA(WAR) /appA アプリB(WAR) /appB アプリC(WAR) /appC 共有ライブラリ lib/, conf/ 全アプリが参照 Spring Boot:組み込み型 アプリA(JAR) port: 8080 組み込みTomcat アプリB(JAR) port: 8081 組み込みTomcat アプリC(JAR) port: 8082 組み込みTomcat Tomcatを全アプリで共有 各アプリが独立して動作

従来の構成

OS(Linux / Windows) JVMプロセス(これが1つだけ) OSから見えるのはこれ1プロセスのみ 例: java -jar catalina.jar Tomcatエンジン(Catalina) リクエスト受付・スレッド管理・コネクタ管理 アプリA(WAR) 専用ClassLoader クラス群(アプリA用) スレッドプール(共有) Heapメモリ(混在) /appA コンテキスト アプリB(WAR) 専用ClassLoader クラス群(アプリB用) スレッドプール(共有) Heapメモリ(混在) /appB コンテキスト アプリC(WAR) 専用ClassLoader クラス群(アプリC用) スレッドプール(共有) Heapメモリ(混在) Heapメモリ(混在) /appC コンテキスト

スポンサーリンク
タイトルとURLをコピーしました