こんにちは、鈴木です。
Spring Boot を使ってみたので、ご紹介します。
関連プロダクトが多すぎて把握しきれない!
ってことありませんか?
きちんとモジュール分割されたフレームワークは、コアとなる機能(Spring Framework)があり、関連するプロダクト(Spring Security とか Spring Data とか)が山盛りという構成になります。
このように分割されていると、取捨選択して必要な機能だけ利用することができるので、使う側にとって大きなメリットになります(巨大な一枚岩のフレームワークだとそうはいきませんね)。一方で慣れるまでは「どれを選べば良いの!?」となりがちですね。
Spring Boot は「関連プロダクトが多すぎて大変だ」という問題を解消してくれます。
Spring Boot とは
Spring Boot のサイトには「スタンドアロンで production-grade な Spring ベースのアプリケーションを簡単に作ることができる」と書かれており、以下の特徴が挙げられています。
- スタンドアロンな Spring アプリケーションを作ることができる。
- Tomcat や Jetty を直接組み込むので war ファイルのデプロイが不要。
- Maven の設定をシンプルにする 'starter' POM を提供してくれる。
- Spring を自動設定してくれる(できる限り)。
- 本番用の機能(メトリクス、ヘルスチェック、設定の外部化など)を提供してくれる。
- コード生成や XML の設定が不要。
なかなか良さそうな雰囲気の言葉が並んでいますね。
「優れたフレームワークは30分以内で Hello World できる」と言われることもありますが、実際に Spring Boot を使ってみたところ、30 分かからずに Hello World することができました。
Spring Boot を使う
それでは Spring Boot を使ってみましょう。
Maven でプロジェクトを作成する
まずは Maven でプロジェクトを作成します。
1 |
mvn archetype:create -DgroupId=com.techscore.spring_boot_sample -DartifactId=spring_boot_sample |
pom.xml に Spring Boot を追加する
次に pom.xml に Spring Boot を追加します。コメントで「<!-- 追加: ここから -->」「<!-- 追加: ここまで -->」と書かれた範囲を追加しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.techscore.spring_boot_sample</groupId> <artifactId>spring_boot_sample</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>spring_boot_sample</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <!-- 追加: ここから --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.0.2.RELEASE</version> </parent> <!-- 追加: ここまで --> <dependencies> <!-- 追加: ここから --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 追加: ここまで --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies> </project> |
Controller を作る
次に Controller として src/main/java/com/techscore/spring_boot_sample/HelloController.java を作ります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package com.techscore.spring_boot_sample; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @EnableAutoConfiguration public class HelloController { @RequestMapping("/") @ResponseBody public String home() { return "Hello, Spring Boot!"; } public static void main(String[] arguments) { SpringApplication.run(HelloController.class, arguments); } } |
実行する
それでは実行してみましょう。
1 |
mvn spring-boot:run |
しばらくすると以下のようなログが出力されます。
1 2 3 4 5 6 7 8 9 10 11 |
... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.0.2.RELEASE) ... |
ブラウザで http://localhost:8080/ にアクセスすると、「Hello, Spring Boot!」と表示されるはずです。
面倒な XML ファイルなどを書くことなく Web アプリケーションとして起動することができました。
これで Spring Boot での Hello World は終わりです。
実行可能な jar ファイルを作る
先ほどは「mvn spring-boot:run」でアプリケーションを実行しましたが、spring-boot-maven-plugin を導入すると単独で実行可能な jar ファイルを作成することができます。スタンドアロンで動作する jar ファイルが作成できるということです。
pom.xml を編集する
追加する部分だけを記載しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> ... <!-- 追加: ここから --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.techscore.spring_boot_sample.HelloController</mainClass> </configuration> </plugin> </plugins> </build> <!-- 追加: ここまで --> ... </project> |
ちなみに <mainClass> はアプリケーション内に main メソッドを持つクラスが 1 つだけの場合は省略することができます。
実行する
先ほどは「mvn spring-boot:run」で実行しましたが、今度は java コマンドで実行します。
1 |
java -jar target/spring_boot_sample-1.0-SNAPSHOT.jar |
先ほどと同じように以下のようなログが出力されるので、http://localhost:8080/ にアクセスしてみてください。
1 2 3 4 5 6 7 8 9 10 11 |
... . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.0.2.RELEASE) ... |
設定をデフォルトから変更する
Spring Boot はデフォルトで諸々の設定をしてくれるので楽なのですが、デフォルトから変更する方法も準備されています。
application.properties または application.yml というファイルを作成し、その中に設定を記述すれば OK です(Maven のプロジェクトでは src/main/resources/ 以下にファイルを作成します)。
例えばリクエスを受け付けるポートを 7777 に変更したい場合は application.yml というファイルを作成し、以下の内容を記載します。
1 2 |
server: port: 7777 |
他にも設定可能な項目は多くあり、以下のページにまとめられていました。
まとめ
Spring Boot を試してみましたが、下準備がほとんど無く、実際にものが動くまでにかかる時間が短いところが好感触でした。