IntelliJ IDEA で Spring Boot を動かしてみるメモ

スポンサーリンク

Spring Boot を試してみました.

環境

IntelliJ IDEA 13.1.5
Oracle Java SE 8u25
Maven 3.2.3
Spring Boot 1.1.8

OS は,Ubuntu 14.04.1 64bit, OS X 10.10 Yosemite, Windows 7 Professional SP1 64bit で動かしてみました.

前もってインストールしておくもの

Java SE 8 をダウンロードしてインストールしておきます.
http://www.oracle.com/technetwork/java/javase/downloads/index.html

Maven 3 の Binary をダウンロードし,適当なパスに配置させます.
http://maven.apache.org/download.cgi

IntelliJ IDEA で Spring を使用するには FREE の Community Edition ではなく Ultimate Edition が必要なようです.Free 30-day trial があるので,ひとまずそれをインストールして試してみます.
https://www.jetbrains.com/idea/download/

ウェブブザウザは Google Chrome, あるいは Firefox を使用しました.

Ubuntu での前準備

OS X での前準備

Windows での前準備 (環境変数)

環境変数で JAVA_HOME と M2_HOME を設定しておきます.

[スタート] – [コンピュータ] – 右クリック – [プロパティ] – [システムの詳細設定] で [システムのプロパティ] ウインドウが開くので [詳細設定] の [環境変数] をクリックします.

[システム環境変数] の [新規] をクリックし,変数名を “JAVA_HOME”,変数値を例えば “C:\Program Files\Java\jdk1.8.0_25” と設定し,[OK] をクリックします.

[システム環境変数] の [新規] をクリックし,変数名を “M2_HOME”,変数値を例えば “C:\Program Files\apache-maven-3.2.3” と設定し,[OK] をクリックします.

[システム環境変数] の [変数] Path を選択し,[編集] をクリックし,変数値に例えば “;%JAVA_HOME%\bin;%M2_HOME%\bin” を追記します.

プロジェクトの作成

IntelliJ を起動し,[File] – [New Project] – [Maven] を選択します.

[Project SDK] で,JDK をインストールしたパス (例えば,C:\Program Files\Java\jdk1.8.0_25 等) を指定し,[Create from archetype] にチェックを入れ,
org.apache.maven.archetypes:maven-archetype-quickstart

maven-archetype-quickstart:RELEASE
を選択し,[Next] ボタンをクリックします.

GroupId,ArtifactId,Version を任意に設定し (例えば,GroupId は pro.hirooka,ArtifactId は my-spring-boot のように設定したりしています.Version はデフォルトの 1.0-SNAPSHOT でよいでしょう),[Next] ボタンをクリックします.”GroupId + ArtifactId” は,一意となるものにします.一般的には GroupId はプロジェクトを一意に識別する名前で,プロジェクトのルートパッケージ名,ArtifactId はプロジェクトの成果物の名前で,jar や war に付ける名前ですかね.例えば,GroupId を pro.hirooka.,ArtifactId を my-spring-boot と設定してみます.

Maven home directory は,”M2_HOME is used by default” です.User setting file は,ホームディレクトリ下の .m2/settings.xml,Local repository は,ホームディレクトリ下の .m2/repository がデフォルトで設定されています.最後に Properties が適切なものかどうか確認し,[Next] ボタンをクリックします.

Project name を任意に設定します.例えば, MySpringBoot のように設定してみます.Project name を設定すると Project location に自動反映されます.[Finish] ボタンをクリックします.

プロジェクトが作成されます.

プロジェクトの構造

作成されたプロジェクトのディレクトリ構造は,下記の通りです.

MySpringBoot
 |__ .idea
 |__ src
 |     |__ main
 |     |     |__ java
 |     |          |__ pro.hirooka
 |     |                |__ App.java
 |     |__ test
 |           |__ java
 |                |__ pro.hirooka
 |                      |__ AppTest.java
 |__ MySpringBoot.iml
 |__ pom.xml

External Libraries
 |__ 1.8

pom.xml

まず,pox.xml を編集してみます.

http://projects.spring.io/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>pro.hirooka</groupId>
  <artifactId>my-spring-boot</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>my-spring-boot</name>
  <url>http://maven.apache.org</url>

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

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

下記のように編集してみます.

<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>pro.hirooka</groupId>
    <artifactId>my-spring-boot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>my-spring-boot</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.1.8.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>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>1.1.8.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

pom.xml 編集後,プロジェクトを右クリックし,[Maven] – [Generate Sources and Update Folders] を選択します.src/main/java のアイコンが青くなり,Sources Root として扱われます.src/test/java のアイコンが緑になり,Test Sources Root として扱われます.各々,パッケージを構成する階層が 1 つの階層にまとめられます.

プロジェクトを右クリックし,[Maven] – [Reimport] を選択します.pom.xml の dependencies に記述されているライブラリがダウンロードされ,External Libraries に反映されます.(org.springframework のライブラリなど)

main メソッドを持つクラス

Spring Boot は,public static void main をエントリーポイントとして組み込みウェブサーバを立ち上げてくれるようです.

src/main/java にデフォルトで App.java という main メソッドを持つクラスがあります.
それを使用するのもよいですし,src/main/java を右クリックし,[New] –

 を選択し,Name を "Application" とする Class を作成してみてもよいです.ここでは,App.java を使用することにします.

App.java を下記のように編集してみます.

[java]
package pro.hirooka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

@RestController
class GreetingController {

    @RequestMapping("/hello/{name}")
    String hello(@PathVariable String name) {
        return "Hello, " + name + "!";
    }
}

プロジェクトの実行

IntelliJ 上でプロジェクトを実行してみます.Spring Boot に組み込まれている Tomcat が起動し,その上でウェブアプリケーションが動く,という形になります.

IntelliJ のメニューの [Run] – [Edit Configurations…] で,プラスボタンをクリックし,[Maven] を選択します.Maven が追加されます.

Name を任意のものに設定します.Parameters タブを選択し,[Command line] に “spring-boot:run” と入力します.[OK] ボタンを押します.

IntelliJ のメニューの [Run] – [Run “Name”] で実行してみます.

下記のようなログが表示され,下記のように Tomcat が動き,ウェブアプリケーションが動くような内容になっていることを確認します.

TomcatEmbeddedServletContainerFactory : Server initialized with port: 8080
Starting service Tomcat
Starting Servlet Engine: Apache Tomcat/7.0.55
Initializing Spring embedded WebApplicationContext
...
TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080/http
Started App in 2.291 seconds (JVM running for 2.562)

すべてのログは下記の通りです.

/usr/local/java/bin/java -Dmaven.home=/usr/local/apache-maven-3.2.3 -Dclassworlds.conf=/usr/local/apache-maven-3.2.3/bin/m2.conf -Didea.launcher.port=7532 -Didea.launcher.bin.path=/usr/local/idea-IU-135.1289/bin -Dfile.encoding=UTF-8 -classpath /usr/local/apache-maven-3.2.3/boot/plexus-classworlds-2.5.1.jar:/usr/local/idea-IU-135.1289/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher -Didea.version=13.1.5 spring-boot:run
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building my-spring-boot 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] >>> spring-boot-maven-plugin:1.1.8.RELEASE:run (default-cli) > test-compile @ my-spring-boot >>>
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-spring-boot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hirooka/IdeaProjects/MySpringBoot/src/main/resources
[INFO] skip non existing resourceDirectory /home/hirooka/IdeaProjects/MySpringBoot/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-spring-boot ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/hirooka/IdeaProjects/MySpringBoot/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-spring-boot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hirooka/IdeaProjects/MySpringBoot/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-spring-boot ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /home/hirooka/IdeaProjects/MySpringBoot/target/test-classes
[INFO] 
[INFO] <<< spring-boot-maven-plugin:1.1.8.RELEASE:run (default-cli) < test-compile @ my-spring-boot <<<
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.1.8.RELEASE:run (default-cli) @ my-spring-boot ---
[INFO] Attaching agents: []

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

2014-10-25 21:31:56.847  INFO 17114 --- [           main] pro.hirooka.App                          : Starting App on dev with PID 17114 (/home/hirooka/IdeaProjects/MySpringBoot/target/classes started by hirooka in /home/hirooka/IdeaProjects/MySpringBoot)
2014-10-25 21:31:56.876  INFO 17114 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@6c9f5c0d: startup date [Sat Oct 25 21:31:56 JST 2014]; root of context hierarchy
2014-10-25 21:31:57.305  INFO 17114 --- [           main] o.s.b.f.s.DefaultListableBeanFactory     : Overriding bean definition for bean 'beanNameViewResolver': replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2014-10-25 21:31:57.763  INFO 17114 --- [           main] .t.TomcatEmbeddedServletContainerFactory : Server initialized with port: 8080
2014-10-25 21:31:57.893  INFO 17114 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
2014-10-25 21:31:57.893  INFO 17114 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.55
2014-10-25 21:31:57.955  INFO 17114 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-10-25 21:31:57.955  INFO 17114 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1081 ms
2014-10-25 21:31:58.348  INFO 17114 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-10-25 21:31:58.351  INFO 17114 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2014-10-25 21:31:58.498  INFO 17114 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2014-10-25 21:31:58.630  INFO 17114 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/hello/{name}],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto java.lang.String pro.hirooka.GreetingController.hello(java.lang.String)
2014-10-25 21:31:58.632  INFO 17114 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=,custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
2014-10-25 21:31:58.633  INFO 17114 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2014-10-25 21:31:58.647  INFO 17114 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2014-10-25 21:31:58.647  INFO 17114 --- [           main] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2014-10-25 21:31:58.761  INFO 17114 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
2014-10-25 21:31:58.810  INFO 17114 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080/http
2014-10-25 21:31:58.812  INFO 17114 --- [           main] pro.hirooka.App                          : Started App in 2.291 seconds (JVM running for 2.562)

ウェブアプリケーションの動作確認

ウェブブラウザで例えば
http://localhost:8080/hello/hirooka
にアクセスしてみます.

Hello, hirooka! のように表示されれば,ウェブアプリケーションが正常に動作しています.

実行可能な jar ファイルの作成

Spring Boot は,public static void main をエントリーポイントとして組み込みウェブサーバを立ち上げてくれるようです.つまり,Spring Boot で jar ファイルを生成し,java -jar mokyu.jar のように実行することでサーバが稼働し,その上でウェブアプリケーションが動きます.サーバは Tomcat だけではなく Jetty でも手軽に実行できるようです.ここでは Tomcat を使用してみます.

IntelliJ のメニューの [Run] – [Edit Configurations…] で,プラスボタンをクリックし,[Maven] を選択します.Maven が追加されます.

Name を任意のものに設定します.Parameters タブを選択し,[Command line] に “package” と入力します.[OK] ボタンを押します.

IntelliJ のメニューの [Run] – [Run “Name”] で実行してみます.

下記のようなログが表示され,”BUILD SUCCESS” であり,”Process finished with exit code 0″ であることを確認します.

プロジェクトの target フォルダに my-spring-boot-1.0-SNAPSHOT.jar というファイル名の jar ファイルが生成されます.

すべてのログは下記の通りです.

/usr/local/java/bin/java -Dmaven.home=/usr/local/apache-maven-3.2.3 -Dclassworlds.conf=/usr/local/apache-maven-3.2.3/bin/m2.conf -Didea.launcher.port=7533 -Didea.launcher.bin.path=/usr/local/idea-IU-135.1289/bin -Dfile.encoding=UTF-8 -classpath /usr/local/apache-maven-3.2.3/boot/plexus-classworlds-2.5.1.jar:/usr/local/idea-IU-135.1289/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain org.codehaus.classworlds.Launcher -Didea.version=13.1.5 package
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building my-spring-boot 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-spring-boot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hirooka/IdeaProjects/MySpringBoot/src/main/resources
[INFO] skip non existing resourceDirectory /home/hirooka/IdeaProjects/MySpringBoot/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-spring-boot ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-spring-boot ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /home/hirooka/IdeaProjects/MySpringBoot/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-spring-boot ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.15:test (default-test) @ my-spring-boot ---
[INFO] Surefire report directory: /home/hirooka/IdeaProjects/MySpringBoot/target/surefire-reports
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit4/2.15/surefire-junit4-2.15.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit4/2.15/surefire-junit4-2.15.pom (3 KB at 2.4 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/2.15/surefire-providers-2.15.pom
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-providers/2.15/surefire-providers-2.15.pom (3 KB at 9.2 KB/sec)
Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit4/2.15/surefire-junit4-2.15.jar
Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/surefire/surefire-junit4/2.15/surefire-junit4-2.15.jar (63 KB at 123.4 KB/sec)

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running pro.hirooka.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec - in pro.hirooka.AppTest

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-spring-boot ---
[INFO] Building jar: /home/hirooka/IdeaProjects/MySpringBoot/target/my-spring-boot-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:1.1.8.RELEASE:repackage (default) @ my-spring-boot ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.502 s
[INFO] Finished at: 2014-10-25T21:39:08+09:00
[INFO] Final Memory: 19M/259M
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

実行可能な jar でウェブアプリケーションの実行

コマンドプロンプトで target ディレクトリに移動し,下記のように実行してみます.

java -jar my-spring-boot-1.0-SNAPSHOT.jar

IntelliJ で mvn spring-boot:run を実行した場合と同様に,組み込みの Tomcat が起動し,その上でウェブアプリケーションが動きます.

デプロイ可能な war ファイルの作成

pom.xml の packaging の値を jar から war に変更します.

<packaging>war</packaging>

pom.xml の dependencies に下記を追加します.

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-tomcat</artifactId>
  <scope>provided</scope>
</dependency>

少し躓いた点としては,SpringBootServletInitializer を継承したクラスを作成しないと,Tomcat 8 の webapps ディレクトリに war を置いてもウェブアプリケーションが動作しませんでした.

例えば,

package pro.hirooka;

import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

public class WebInitializer extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(App.class);
    }

}

詳しくはこちら.

Converting a Spring Boot JAR Application to a WAR using Maven
http://spring.io/guides/gs/convert-jar-to-war-maven/

SpringBootServletInitializer を継承したクラスを作成後,実行可能な jar を作成する場合と同様に mvn package を実行すると my-spring-boot-1.0-SNAPSHOT.war ファイルが生成されるので,それを Tomcat 8 の webapps ディレクトリに置きます.

その後,別途インストールしている Tomcat を起動し,
http://(IPアドレス):8080/my-spring-boot-1.0-SNAPSHOT/hello/hirooka
にアクセスし,ウェブアプリケーションが正常に動いていることを確認します.

デプロイ可能な war を作成することについてはこちらを参考に.
53.2 Packaging executable jar and war files
http://docs.spring.io/spring-boot/docs/1.1.8.RELEASE/reference/htmlsingle/#build-tool-plugins-maven-packaging

また,このデプロイ可能な war は,実行可能な war でもあります.つまり,

java -jar my-spring-boot-1.0-SNAPSHOT.war

を実行すると,組み込みの Tomcat でウェブアプリケーションが実行されます.

http://(IPアドレス):8080/hello/hirooka

にアクセスし,ウェブアプリケーションが正常に動いていることを確認します.

Spring Boot 組み込みの Tomcat のバージョンの変更

デフォルトでは Tomcat 7 のようで,Tomcat 8 を使用したい場合は pom.xml の properties に下記のような追記を行います.

<properties>
  <tomcat.version>8.0.14</tomcat.version>
</properties>

これでプロジェクトを実行すると,きちんと指定したバージョンの Tomcat が起動していることをログで確認することができます.

[           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.14

その他 Tomcat,Jetty に関する設定,Heroku へのデプロイ方法など

その他 Tomcat に関する設定や Jetty に関する設定についてはこちらを参考にします.Heroku にデプロイするやり方についても記述されています.
Deploying Spring Boot Applications
http://spring.io/blog/2014/03/07/deploying-spring-boot-applications

実行可能な jar を作成することについてはこちらも参考に.
10.5 Creating an executable jar
http://docs.spring.io/spring-boot/docs/1.1.8.RELEASE/reference/htmlsingle/#getting-started-first-application-executable-jar

参考情報

Spring Boot Reference Guide
http://docs.spring.io/spring-boot/docs/1.1.8.RELEASE/reference/htmlsingle/

Spring Boot Maven Plugin
http://docs.spring.io/spring-boot/docs/1.1.8.RELEASE/maven-plugin/

Spring BootではじめるSpring MVCアプリケーション高速開発入門
http://libro.tuyano.com/index2?id=11136003

Spring4とSpring Bootで作る次世代Springアプリケーション #jjug #jsug
http://www.slideshare.net/makingx/spring-4spring-boot-spring-jjug-jsug

Spring Bootで変わる Javaアプリ開発! #jsug
http://www.slideshare.net/makingx/spring-boot-java-jsug

Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
http://www.slideshare.net/makingx/grails-30-spring-boot

Spring Boot 入門
http://www.techscore.com/blog/2014/05/01/spring-boot-introduction/

Spring Bootで遊んでみる
http://qiita.com/don_hanabi/items/fe5223c64ecc44a0d944

Spring Bootで高速アプリ開発
http://dev.classmethod.jp/server-side/java/springboot/

MVNREPOSITORY
http://mvnrepository.com/

Spring MVC and Maven – first project: Hello world! Basic template
http://about-java.com/spring-framework/spring-mvc/spring-mvc-and-maven-first-project-hello-world-basic-template/