SpringBootの Fully Executable Jar

OYPosted by

どうも。
GWは特に何するでもなくまあ、だらけてましたね。計画性のない日々もたまにはいいものです。
まあそれはさておき、さっそく本題に入ります。

最近、注目を集めている(?)SpringBootですが、Springスターターと呼ばれるだけに、Springプロジェクトを構築する上で面倒な部分を色々引き受けてくれます。

また、それ以上に特筆すべき点として、そのまま実行可能なJar(Fully Executable Jar)というものがあります。

Javaアプリケーションのサービスと言えば、Jarファイルやクラスパスなど必要なものをすべてwarに固めて、TomcatなどのAPサーバ上に配置して展開するイメージがあると思います。

が、SpringBootでは「Tomcat上に配置するためのwar」ではなく、「Tomcatを展開し、その上でアプリケーションも動かすJar」が作成できるのです。(pomの設定次第でwarも作れます)

つまり、Tomcatをサーバ上にインストールする必要すらないため、Webサーバ上で実行可能jarをサービス化し、起動するという形になります。

このサービス化の手順も、SpringBootのVer1.3以降ではinit.dにjarのシンボリックリンクを作成するだけなので非常に簡単です。実行スクリプトがjarに内蔵されているので自分でスクリプトを書く必要はありません。

また、Tomcat上にwarを置くのと実行可能jarを使うのでは他にも大きな違いがあります。

1.アプリケーションに割り当てられるメモリ領域

まず、1つのTomcatは1つのJVM上で動作しており、1つのTomcat上に複数のwarを展開した場合、当然、共通のJVMを利用することになります。
これは、複数のアプリが共通のメモリ領域を利用していることにもなるので、例えばアプリAがメモリをバカ食いしていれば他のアプリB、C、etc…が使えるメモリ領域が大きく制限されてしまいます。
実行可能jarであれば、アプリごとに別々のTomcatが展開され、それぞれのメモリ領域が独立しているので余計な心配が不要です。

2.ポート番号

1つのTomcat上で動いているアプリは共通のポート番号が使用できます。しかし、実行可能jarによって複数のアプリを同じホストに展開するのであれば、ポート番号は別々でなくてはなりません。(まあ、ポート使いきるほどのアプリを同一ホストに展開するなんてことはないと思いますが)

3.Tomcatのアップデート

実行可能jarはビルドされた段階で内蔵Tomcatのバージョンが固定されるため、Tomcatの脆弱性発覚などによりアップデートが必要になった場合は、プロジェクト単位でそれぞれ設定を変更する必要があります。数が多いとちょっとめんどくさいかもしれませんね。

 

他にもいろいろありそうですが、僕の知りうる限りだとここまでですかね。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA