最近の流行りに乗っかれていないので、SpringBootを試してみる。
そもそもSpringBootとは
JavaEEと並んでメジャーなフレームワークに『Spring』というものがある。
Springは以下のような複数のプロジェクト(抜粋)から構成されていて、このプロジェクトのひとつがSpringBoot。
- Spring Framework
- DIxAOPコンテナやトランザクション管理、ウェブアプリケーション、データアクセスなどを含むコアプロジェクト。
- Spring Data
- Spring Security
- セキュリティ関連のプロジェクト。
- Spring Cloud
- クラウド開発関連のプロジェクト。よくわかってないので、今後勉強したい。
- Spring Boot
- Springはカスタマイズ性が高い代わりに、設定できる項目が多い。
そういう設定項目について、「だいたいのアプリ開発ではこんなもんでいいっしょ」という設定をしてくれるプロジェクト。
そのほかにも開発スピードを上げるために色々提供している。
- Springはカスタマイズ性が高い代わりに、設定できる項目が多い。
SpringBootの特徴
- 組み込みサーバ(Tomcat,Jetty,Undertow)
- ビルド後のjarは java -jar で実行可能
- プロジェクトを簡単に作成できる (Spring Initializr)
- 使いたいプロジェクトをWEBコンソールから選べば、作成できる
- 快適に開発できる (spring-boot-devtools)
- クラスを修正したら自動でrestartされる
- フロント開発時にLiveReloadができる
環境
プロジェクトの作成
EclipseにSTSというSpring関連のプラグインが提供されているのでインストールする。 参考: 「第4章」Spring Tool Suite(STS)プラグインのインストール - Qiita
Spring Initializrでプロジェクトを作成する
右クリック New > Other > Spring Starter Project利用したいプロジェクトを選ぶ。
今回はとりあえずWebだけ。Finishを押してプロジェクト作成完了。
pom.xmlにspring-boot-devtoolsを追加すると、クラス修正に応じてアプリのrestartを勝手にやってくれるので快適。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
SpringBootを起動する
プロジェクトを右クリック Run As> Spring Boot App
コードを書く
以下のようなコードを書く。 spring-boot-devtoolsを使っていると、コードを保存したときにrestartしてくれるのでちょっと快適。
package com.example; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("greetings") public class GreetingRestController { @RequestMapping(method = RequestMethod.GET) public Greeting helloworld() { Greeting greeting = new Greeting(); greeting.setGreeting("hello world!"); return greeting; } } class Greeting { private String greeting; public String getGreeting() { return greeting; } public void setGreeting(String greeting) { this.greeting = greeting; } }
確認する
localhost:8080/greetings にアクセスすると以下のような結果が戻ってくる。 JavaBeanがJSONに変換されているのがわかる。
終わりに
すぐhelloworldできますね。