プログラマーの調べ物

プログラマーが調べ物をするときに役に立つサイトを作ります。

Spring Bootを使い始めるためのチュートリアル

Spring Bootは2013年に開発が始まり、2014年4月にバージョン1.0がリリースされました。 Spring Bootを使えば最初からさまざまな機能を利用することができます。

アプリケーションサーバにデプロイするという面倒な作業を省き、mainメソッドを実行するだけでWebアプリを実行できます。

Spring Bootを始める

まずは以下のURLに移動します。 https://start.spring.io/

次に、DependenciesのSearch for dependenciesで「Web」を入力してEnterを押します。

そしてGenerate Projectをクリックします。

ダウンロードされたプロジェクトを解凍して、Spring Tool Suiteに取り込みます。

Spring Tool Suiteでは、

File -> Import -> Existing Maven Projectsを選択し、Nextを押下。

先ほど解凍したフォルダを選択します。

取り込んだプロジェクトを実行するだけで、Webアプリケーションが起動します。

DemoApplication.javaをいじってみる

ダウンロードしたdemoを実行しても、初期状態のままではブラウザに何も表示されません。

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sun Jan 01 20:47:47 JST 2017
There was an unexpected error (type=Not Found, status=404).
No message available

こんな感じのメッセージが出るだけです。

なぜなら、Controllerがないからです。 HTTP GETを受け取るようにしましょう。

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {

    @RequestMapping("/")
    String hello() {
        return "Hello Spring Boot!";
    }
    
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

Javaを修正した後に、localhost:8080にアクセスしてみます。

すると、

「Hello Spring Boot!」

と表示されます。

Spring Bootでテストコードを書く

Spring Initializerで生成したプロジェクトには、デフォルトでテストコードが含まれています。 たとえば、以下のようなコードを書いて、実行すると、上のコードをテストしてくれます。

package com.example;

import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.context.embedded.LocalServerPort;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.client.RestTemplate;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class DemoApplicationTests {

    RestTemplate restTemplate = new RestTemplate();

    @LocalServerPort
    int port;
    
    @Test
    public void contextLoads() {
        assertThat(restTemplate.getForObject("http://localhost:" + port, String.class), is("Hello Spring Boot!"));
    }
    
}