Help us understand the problem. What is going on with this article?

Spring Boot 入門

More than 1 year has passed since last update.

1. Spring Bootとは

Spring Boot では、本番に対応可能なスタンドアロンの Spring ベースのアプリケーションを簡単に作成して、「そのまま実行」することができます。私たちは Spring プラットフォームとサード・パーティーを私たち自身の主張に基づいた見解で捉えることにより、最小限の手間でアプリケーションの作成に取り掛かれるようにしています。- Spring Boot の基礎

2. 特長

  • スタンドアローンなSpringアプリケーションを作る。
  • Tomcat, Jetty 又は Undertow ディレクトリを組み込む。(warのdeploy不要)
  • Mavenのコンフィギュレーションを簡素化するための自律的スタータを提供する。
  • できうるかぎりSpringを自動設定する。
  • メトリクス、ヘルスチェック、外部化されたコンフィギュレーションのような実用的な機能を提供する。
  • コード自動生成とXML設定は絶対に不要である。 - Spring Boot

3. 構成

3.1. サーバレス・アーキテクチャ

  • サーバレスとは物理的なサーバが不要であること(〜仮想化)ではなく、「Webサーバ」が不要であるという意味。
  • サーバレスは、自分のアプリケーションにWebコンテナ(tomcatやjetty)を内包したjarを生成することによって実現する。
  • Webコンテナを内包したjarは、特殊なクラス・ローダーを利用して複数のjarをいい感じにまとめてくれる「über jar」で実現している。

4. 開発環境

4.1. Eclipse

  • Gradle, Maven向けに提供されているプラグインを活用することで、Eclipseで簡単に開発できる。

  • Spring BootのウェブサイトにBuilding a RESTful Web ServiceというEclipseで開発する例が提供されている。これはgithubにも公開されている。

git clone https://github.com/spring-guides/gs-rest-service.git
  • この例はhttp://localhost:8080/greetingにアクセスすると、JSONで{"id":1,"content":"Hello, World!"}を返すRESTfulウェブサービスである。
  • POMはこんな感じ。複数用意されているSpring Bootのスタータを選択するだけで簡単。
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<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>org.springframework</groupId>
    <artifactId>rest-service</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.jayway.jsonpath</groupId>
            <artifactId>json-path</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
</project>
  • エントリポイントのMainメソッドはこんな感じ。@SpringBootApplicationアノテーションが面倒な設定作業を肩代わりしてくれているらしいので、すっきりしている。
Application.java
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • Springでは、HTTPリクエストはControllerクラスによってhandleされる。Controllerクラスはこんな感じ。@RestControllerアノテーションによって、Controllerクラスは認識され、@RequestMappingアノテーションによって、/greetingのGETリクエストが設定される。
GreetingController.java
package hello;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) {
        return new Greeting(counter.incrementAndGet(),
                            String.format(template, name));
    }
}
  • Controllerクラスの戻り値の型GreetingはPOJOなクラスで良い。
Greeting.java
package hello;

public class Greeting {

    private final long id;
    private final String content;

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }

    public long getId() {
        return id;
    }

    public String getContent() {
        return content;
    }
}

4.2. Spring Tool Suite

  • プロジェクトの新規作成

Screenshot from 2018-01-26 21-03-24.png

5. Framework

5.1. Spring AOP

SpringでAOP に詳しく書いてある。

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away