Spring Boot お勉強 その1 ~環境構築など~

今回のテーマはSpring Boot。


まず簡単にどんなものか説明すると。
javaDIコンテナ、Springのプロジェクトの1つ
・Springを簡単に使用開始できるように、依存関係や、設定などをひとまとめにしたもの
・Webアプリケーションの場合Tomcatも内蔵(warとして出力もできます)


つまり、準備や環境構築に労力をかけずに、springを使ったjavaのアプリケーションが作れるのがいいところ。
DB使うアプリでも最初はインメモリのDBで始められるからミドル入れる必要がないし。


ではまずは、環境構築から。

ちなみに以下、()で書かれるパスは、私が今回作ったフォルダ構造を一例として書いているものです。


①依存関係解決ツールとしてgradleを使用するので、gradleのインストールから。

まずはこちらからgradle-x.x.x-all.zipをダウンロードします。

http://www.gradle.org/

zipファイルを任意のパス(C:\gradle-1.12)に展開します。

展開した先\bin(C:\gradle-1.12\bin)を環境変数のパスに追加します。


②続いてプロジェクトのフォルダ(C:\test)を作成して、その直下に

build.gradleというテキストファイルを作成する。

内容は以下の通り

buildscript {
    repositories {
        mavenCentral()
        maven { url "http://repo.spring.io/snapshot" }
        maven { url "http://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.0.BUILD-SNAPSHOT")
    }
}

apply plugin: 'java'
apply plugin: 'spring-boot'

jar {
    baseName = 'myproject'
    version =  '0.0.1-SNAPSHOT'
}

repositories {
    mavenCentral()
    maven { url "http://repo.spring.io/snapshot" }
    maven { url "http://repo.spring.io/milestone" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

といってもこれはまんま、以下の公式サイトの9.1.2からパクってきました。

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/

gradleの内容詳細はおいおい勉強したら書くかもしれません。


とりあえずのポイントは、"spring-boot-starter-web"への依存関係を書くだけで、SpringCoreもSpringMvcも組み込みTomcatもログライブラリもなんだかんだクラスパスに追加してくれるということ。
なお、hibernatejpaを使いたければ"spring-boot-starter-data-jpa"を、AOPを使いたければ"spring-boot-starter-aop"を依存関係にどんどん追加していけば、いい感じにビルドしてくれるようになりそうです。


③クラスパスとなるフォルダを作成する。

spring bootのデフォルトでは、プロジェクトフォルダから見て、src/main/javaとsrc/main/resourcesがクラスパスになるので、このフォルダを作成します。

よくあるプロジェクト構成です。

想像はつくかもしれませんが、テストコードのクラスパスは、上記2つに加え、src/test/javaとsrc/test/resourcesになります。


④アプリの最上位となるパッケージを作成し、そこにアプリケーションの起動ポイントとなるクラスを作成する。(c:\test\src\main\java\com\example\test\Application.java

その内容は以下の通りです。

package com.example.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@EnableAutoConfiguration
@ComponentScan
public class Application {
	
	public static void main(String[] args) throws Exception {
		
		SpringApplication.run(Application.class, args);
	}

}

要素をざっくり説明していくと


・mainメソッド
言わずもがなですが、アプリの起動ポイント。
設定クラスとして自クラスを指定して、Springを起動しています。


・Configurationアノテーション
設定のBeanである旨を宣言している。


・EnableAutoConfigurationアノテーション
Spring Bootの各種自動設定を有効にしている。
Spring Bootのキモはおそらくこれだと思っています。
これによって、内包してるTomcatが動いたり、ViewResolverが自動で追加されたり、Hibernateがいい感じの設定で動いたりなどしてくれる。
一部設定の変更などももちろん可能(後述の予定)


・ComponentScanアノテーション
ControllerとかServiceとかのクラスにアノテーションをつけておくと自動的にBean定義に追加してくれるというもの。


⑤ターミナルからアプリケーションのルートフォルダ(c:\test)に移動して、以下のコマンドを実行。

gradle build

依存関係の解決とコンパイルが実行され、build\libs以下にjarファイルが作成されます。
私の環境の場合、myproject-0.0.1-SNAPSHOT.jarでした。
これはbuild.gradleに指定したbasenameとversionによって変わってきます。


⑥アプリの起動
コマンドから以下を実行

java -jar c:\test\build\libs\myproject-0.0.1-SNAPSHOT.jar

これでとりあえずtomcatが起動して、アプリがマウントされます。
http://localhost:8080/でアプリにアクセスできるはずですが、まだControllerクラスがないので404になるでしょう。


その辺からは次回以降。