自己紹介
- opengl-8080
- 主に Qiita で技術メモを書いたり
- 関西の SIer 勤務
Spring Boot とは
- Spring ベースのアプリケーションを簡単に作れるようにした仕組み・フレームワーク
- ビルド結果が単一の jar ファイルにまとめられる
単一 jar のメリット
- AP サーバーが同梱されているので、環境ごとに AP サーバーを用意する必要がない
-
java -jar
で起動できる楽さ
単一 jar のデメリット
- AP サーバーも含め全ての依存ライブラリを内包するため、ファイルサイズが大きくなる
jar サイズをがんばって減らしてみた
結果
結果
サイズ比較
どうやったのか?
Java で Hello World はどうやりますか?
1.コードを書く
Hello.java
public class Hello {
public static void main(String... args) {
System.out.println("Hello World");
}
}
2.javac でコンパイル
$ javac Hello.java
3.Hello.class が生成される
4.java で実行
$ java Hello
Hello World
おわかりいただけただろうか?
コンパイル前のソースコードの方が容量が小さい!
javacを叩けるAPIは標準である!
改良版 jar の仕組み
|-LightweightJarExecutor.class :
| → 自分自身の jar の中からソースを取り出してコンパイル・実行するコード
|-...
`-src/ : Spring Boot および依存するライブラリのソース一式
|-ch/ : logback
|-com/ : jackson とか com.sun とか
|-javax/ : javaee の標準 API
|-META-INF/
|-org/ : Spring, hibernate, JBoss, Tomcat, etc...
`-sample/ : Spring MVC の Hello World
起動時の動作
- 自分自身の jar の中からソースコードを抽出し、一時ディレクトリにコピーする
- 一時ディレクトリに出力したソースを
JavaCompiler
を使ってコンパイルする - コンパイル結果の出力先から
URLClassLoader
を使って Spring Boot のメインクラス(JarLauncher
)をロードする -
JarLauncher
のmain()
メソッドを実行する