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

Spring BootでHello World

環境

  • Windows 10, コマンド実行はコマンドプロンプトから
  • Maven 3.6.0
  • Java 11

Mavenで空プロジェクトを作成

アーキタイプにmaven-archetype-quickstartを指定してmvn archetype:generateを実行します。

> mvn -B archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DgroupId=net.hidakanoko -DartifactId=spring-boot-hello-world -Dversion=1.0.0-SNAPSHOT
> cd spring-boot-hello-world

POMの編集

prentspring-boot-starter-parentを指定します。

(...省略)
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

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

  <dependencies>
(...省略)

spring-boot-starter-parentを指定しておくと、各種設定をいい感じにしておいてくれるほか、依存性のversionを省略できるようにdependency-managementセクションを提供してくれます。

Githubにそのparent pomがありました。
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml

この時点でいったんmvn clean installが成功することを確認しておきます。

>mvn clean install

(...省略)

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  16.193 s
[INFO] Finished at: 2019-03-17T10:38:22+09:00
[INFO] ------------------------------------------------------------------------

依存ライブラリの追加

spring-boot-starter-webはRESTful API, MVC, 組み込みTomcatなど、Webサービスの構築に必要なライブラリの依存性を提供してくれます。

dependenciesに下記設定を追加します。

  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

コマンドラインからmvn dependency:treeを実行すると追加された依存ライブラリが確認できます。

コードの編集

すでに配置されているApp.javaを開いて次の通り編集します。

package net.hidakanoko;

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;

@RestController
@EnableAutoConfiguration
public class App 
{
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

アノテーションと処理

  • @RestController ステレオタイプと呼ばれるアノテーションで、コードを読む人とSpringに対してこのクラスが特定の役割を果たすことを示します。このアノテーションはクラスがWeb@Controllerであることを明示して、SpringがWebリクエストを適切に扱ってくれます。
  • @RequestMapping リクエストのルーティング情報を定義しています。指定されたパス "/" へのリクエストはhomeメソッドで処理されます。@RestControllerアノテーションが指定されている場合、メソッドの戻り値はそのまま呼び出し元に返されます。
  • @EnableAutoConfiguration このアノテーションを追加しておくと、jarの依存性等に応じてSpringをいい感じに設定してくれます。spring-boot-starter-webがSpring MVCやTomcatへの依存性を追加するので、このプロジェクトはWebアプリケーションであると判定され、Springもそのように設定されます。
  • mainメソッドはJavaのエントリーポイントです。ここではSpringApplication.runを呼び出しています。runメソッドにはプライマリソースとしてロードするクラスApp.classとコマンドラインパラーメーターがそのまま渡されています。

実行

コマンドラインからmvn spring-boot:runを実行してアプリケーションを起動します。
次のような出力が確認出来たらブラウザでhttp://localhost:8080にアクセスしてみます。"Hello World"がかえって来たら成功です。

> mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.1.3.RELEASE)

https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-starters/spring-boot-starter-parent/pom.xml
https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web

Why do not you register as a user and use Qiita more conveniently?
  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
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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