ちょっと話題の記事

Spring Bootで高速アプリ開発

2014.05.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Spring Bootとは

いまから10年以上前、Spring frameworkは巨大化したJ2EEへのアンチテーゼとして登場し、 DIやAOPといった、当時の最新技術をもってWebアプリ開発に必要な機能を提供してくれました。 ※Spring frameworkについてはこのへん参照

Webアプリ開発において革新をもたらしたSpringでしたが、時間が経つにつれSpring frameworkまわりの さまざまなプロダクトが登場し、J2EE以上に肥大化していきました。 そこで最近登場したのが、今回紹介するSpring Bootです。

Spring Bootは「コードを全く生成することなく、XML構成ファイルなしで本番環境で利用できる Springベースのアプリを作成し、すぐに実行できるようにすること」とのことです。 開発者がSpring Bootを使用することで、「Springプラットフォームのコンポーネントを通じ、 Spring Bootが提供する機能によって開発生産性が劇的に向上する」と、Spring Bootチームの人も言ってます

以前、アプリのビルド時に依存するライブラリをすべて1つのjarにパッケージングして 実行は組み込みのjettyで行う、Dropwizardというフレームワークを紹介しました。 簡単にいうと、Spring BootはこれのSpring版といった感じです。 ではセットアップからサンプルプロジェクトの動作確認までをやってみましょう。

セットアップ

今回使用した動作環境は以下のとおり。 本記事ではMavenを使用しますが、Gradleでもかまいません。

  • OS : MacOS X 10.9.2
  • Apache Maven : 3.2.1
  • Java : 1.7.0_45

Spring Bootプロジェクトの作成

ではSpring Bootを使ったプロジェクトを作成します。 まずはMavenでプロジェクトのひな形を作成。

% mvn archetype:create -DgroupId=jp.cm.springBootSample -DartifactId=springBootSample

生成されたpom.xmlでSpring Bootに関連する依存ファイルを追加します。 「追記」とかかれた部分をpom.xmlに記述してください。

<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>jp.cm.springbootsample</groupId>
  <artifactId>springBootSample</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>springBootSample</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

 <!-- 追記 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.0.2.RELEASE</version>
  </parent>
  <!-- 追記 -->

  <dependencies>
    <!-- 追記 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 追記 -->


  <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>

次に、ソースディレクトリにクラスを追加します。 src/main/java/jp/cm/springbootsample/serviceディレクトリを作成し、 そこに HelloWorldService.javaファイルを下記内容で作成します。 このクラスは、このあと作成するコントローラクラスから呼ばれるサービスクラスです。

package jp.cm.springbootsample.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class HelloWorldService {

	@Value("${name:World}")
	private String name;

	public String getHelloMessage() {
		return "Hello " + this.name;
	}

}

次にコントローラを作成します。このクラスではAutowiredアノテーションを使用して 先ほどのサービスクラスをDIしています。 また、RequestMappingアノテーションで、HTTPリクエストをうけた場合の処理を定義しています。

package jp.cm.springbootsample;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import jp.cm.springbootsample.service.HelloWorldService;
 
@Controller
@EnableAutoConfiguration
@ComponentScan
public class HelloController {
 
    @Autowired
    private HelloWorldService helloWorldService;
	
    @RequestMapping("/")
    @ResponseBody
    public String home() {
        return helloWorldService.getHelloMessage();
    }
 
    public static void main(String[] arguments) {
        SpringApplication.run(HelloController.class, arguments);
    }
 
}

ソースができたらビルドしましょう。packageコマンドでパッケージングし、 spring-boot:runコマンドで実行します。

% mnv package
% mvn spring-boot:run
・
・

アプリが起動したらlocalhost:8080にブラウザでアクセスしてみてください。 HelloControllerのhomeメソッドが実行され、レスポンスが返ります。

これでもいいのですが、このままではDropWizardのようにjarを直接実行することはできないので、 直接jarを実行できるようにしてみます。pom.xmlに次の「追記」部分を記述してください。

 ・
 ・
 </dependencies>

 <!-- 追記 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
          <mainClass>jp.cm.springbootsample.HelloController</mainClass>
        </configuration>
      </plugin>
    </plugins>
  </build>
 <!-- 追記 -->

</project>

上記のようにpom.xmlを修正したら、再度パッケージングしてjarコマンドで実行してみます。 さきほどと同じように動作することがわかります。

% mvn package
% java -jar target/springBootSample-1.0-SNAPSHOT.jar

まとめ

今回はSpring Bootを使用して簡単なサンプルプロジェクトをつくってみました。 設定ファイルなしでSpringを使用したアプリが簡単に作成できたと思います。 なお、Spring Dataを使用したDBアクセスも簡単に使用することができるので、このへんを確認してみてください。

参考サイトなど