読者です 読者をやめる 読者になる 読者になる

かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot でログイン画面 + 一覧画面 + 登録画面の Webアプリケーションを作る ( その2 )( Project作成 )

概要

Spring Boot でログイン画面 + 一覧画面 + 登録画面の Webアプリケーションを作る ( その1 )( MySQL のダウンロード、インストール ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Project の作成
    • develop/product 環境(spring.profiles.activeで指定)で設定ファイルを切り替える&未設定時はエラーにする
    • lombok のインストール

ソフトウェア一覧

参考にしたサイト

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

  2. log4jdbc-log4j2
    https://code.google.com/p/log4jdbc-log4j2/

  3. Spring Boot で log4jdbc-log4j2 を使用してSQLを出力する
    http://qiita.com/ksby/items/7a2cb97215b252bf41b1

  4. Chapter 3: Logback configuration
    http://logback.qos.ch/manual/configuration.html

  5. Apache Commons Lang
    http://commons.apache.org/proper/commons-lang/

  6. IntelliJでLombok
    http://siosio.hatenablog.com/entry/2013/12/23/000054

手順

IntelliJ IDEA の起動、Project の作成

  1. IntelliJ IDEA を起動します。他の Project を開いている場合には、メイン画面のメニューから「File」->「Close Project」を選択して Project をクローズします。

  2. 「Welcome to IntelliJ IDEA」画面が表示されます。画面中央の「Create New Project」をクリックします。

  3. 「New Project」画面が表示されます。画面左側のリストから「Gradle」を選択します ( 前回から何もしていなければこの時点で既に Gradle が選択されています )。

  4. 画面右側に Gradle Project の設定画面が表示されます。以下の設定をした後「Next」ボタンをクリックします。

    • 「Create directories for empty roots automatically」をチェックします。
      ※プロジェクトの src ディレクトリが自動で作成されます。
  5. プロジェクト名とディレクトリを入力する画面が表示されます。以下の値を入力後「Finish」ボタンをクリックします。「Directory Does Not Exist」ダイアログが表示されたら「OK」ボタンをクリックします。

    • 「Project Name」に ksbysample-webapp-basic と入力します。
    • 「Project location」に C:\project-springboot\ksbysample-webapp-basic と入力します ( 前回から何もしていなければ Project Name を入力した後にこのディレクトリになっています )。
  6. IntelliJ IDEA のメイン画面が表示されます。最初に Gradle が実行されて src ディレクトリが作成されますので ( メイン画面の下にメッセージが表示されています )、src ディレクトリが表示されるまで待ちます。

.gitignore の作成

  1. Project View で一番上の階層の ksbysample-webapp-basic を選択した後コンテキストメニューを表示し、「New」->「File」を選択します。「New File」ダイアログが表示されたら .gitignore と入力した後「OK」ボタンをクリックします。

  2. 作成した .gitignore がエディタで開かれるので、リンク先の内容に変更した後クローズします。

build.gradle の編集、反映

  1. 画面左側の Project View から build.gradle をダブルクリックして開きます。

  2. build.gradle をリンク先のその1の内容に変更します。

  3. 画面右側の Tool Window から「Gradle」をクリックして Gradle tasks View を表示します。View 表示後、View の左上にある「Refresh Gradle projects」アイコンをクリックして、変更した build.gradle の内容を反映します。

    f:id:ksby:20141228051436p:plain

    • 更新にはしばらく時間がかかります。画面右下に進捗状況が表示されますので、進捗状況の表示が消えるまで待ちます。

    f:id:ksby:20141228052310p:plain

package の作成

  1. src/main/java の下に以下の階層の package を作成します。
    ※Project View の「Compact Empty Middle Packages」のチェックは外しています。

    f:id:ksby:20150103112437p:plain

  2. src/test/java にも同じ package を作成します。Project View で src/main/java/ksbysample を選択後、Ctrl+C を押してコピーします。

  3. src/test/java を選択後 Ctrl+V を押します。「Copy」ダイアログが表示されますので何も変更せずに「OK」ボタンをクリックします。src/test/java の下にも同じ package が作成されます。

    f:id:ksby:20150103112854p:plain

templates ディレクトリの作成

  1. Project View で src/main/resources を選択後コンテキストメニューを表示し、「New」->「Directory」を選択します。「New Directory」ダイアログが表示されたら templates と入力した後「OK」ボタンをクリックします。

Application.java の作成

  1. Project View から src/main/java/ksbysample/webapp/basic を選択した後コンテキストメニューを表示し、「New」->「Java Class」を選択します。「Create New Class」ダイアログが表示されたら Application と入力した後「OK」ボタンをクリックします。

  2. 作成した Application.java がエディタで開かれるので、リンク先のその1の内容に変更した後クローズします。

  3. Gradle tasks View から build タスクを実行し、BUILD SUCCESSFUL が表示されることを確認します。

※この時点ではまだ bootRun タスクは成功しません。今回 Spring Data JPA を入れているので DB の接続設定が必要なためです。

application.properties の作成、ただし develop/product 環境 ( JVM実行時のオプション -Dspring.profiles.active= で指定する ) で設定ファイルを切り替える

開発環境(-Dspring.profiles.active=develop)と本番環境(-Dspring.profiles.active=product)で設定を変更したいので、そのための手順です。develop では 1) Thymeleaf の cache を無効化、2) log4jdbc-log4j2 による SQL文のログ出力、を設定しています。

  1. Project View で src/main/resources を選択後コンテキストメニューを表示し、「New」->「File」を選択します。「New File」ダイアログが表示されたら application-product.properties と入力した後「OK」ボタンをクリックします。

  2. 作成した application-product.properties がエディタで開かれるので、リンク先の内容に変更した後クローズします。

  3. Gradle の bootRun, test タスク実行時に spring.profiles.active=product が指定されるようにします。build.gradle をダブルクリックして開き、ファイルの最後にリンク先のその2の内容 を追加します。

  4. Gradle tasks View から bootRun タスクを実行し、ログの最後に Started Application が表示されることを確認します。

  5. Ctrl+F2 を押して Tomcat を停止します。

  6. Project View で src/main/resources を選択後コンテキストメニューを表示し、「New」->「File」を選択します。「New File」ダイアログが表示されたら application-develop.properties と入力した後「OK」ボタンをクリックします。

  7. 作成した application-develop.properties がエディタで開かれるので、リンク先の内容に変更した後クローズします。

  8. Gradle の bootRun タスク実行時に spring.profiles.active=develop が指定されるようにします。build.gradle をダブルクリックして開き、リンク先のその3の内容 に変更します。

  9. Gradle tasks View の左上にある「Refresh Gradle projects」アイコンをクリックして、変更した build.gradle の内容を反映します。

  10. Project View で src/main/resources を選択後コンテキストメニューを表示し、「New」->「File」を選択します。「New File」ダイアログが表示されたら log4jdbc.log4j2.properties と入力した後「OK」ボタンをクリックします。

  11. 作成した log4jdbc.log4j2.properties がエディタで開かれるので、リンク先の内容に変更した後クローズします。

  12. Project View で src/main/java/ksbysamle/webapp/basic/config を選択後コンテキストメニューを表示し、「New」->「Java Class」を選択します。「Create New Class」ダイアログが表示されたら ApplicationConfig と入力した後「OK」ボタンをクリックします。

  13. 作成した ApplicationConfig.java がエディタで開かれるので、リンク先の内容に変更した後クローズします。

  14. 以上の作業で Gradle の bootRun タスク実行時は develop環境で実行されるようになります。まず Gradle tasks View から build タスクを実行し、BUILD SUCCESSFUL が表示されることを確認します。

  15. 次に Gradle tasks View から bootRun タスクを実行し、ログの最後に Started Application が表示されることを確認します。

  16. Ctrl+F2 を押して Tomcat を停止します。

  17. ここまでで Project のディレクトリ・ファイルは以下の構成になっています。

    f:id:ksby:20150103144925p:plain

logback.xml の作成、ただし develop/product 環境 ( JVM実行時のオプション -Dspring.profiles.active= で指定する ) で設定を切り替える

  1. logback.xml で if condition 文を使用できるようにするために Janino library をインストールします。build.gradle をダブルクリックして開き、リンク先のその4の内容 に変更します。

  2. Gradle tasks View の左上にある「Refresh Gradle projects」アイコンをクリックして、変更した build.gradle の内容を反映します。

  3. Project View で src/main/resources を選択後コンテキストメニューを表示し、「New」->「File」を選択します。「New File」ダイアログが表示されたら logback.xml と入力した後「OK」ボタンをクリックします。

  4. 作成した logback.xml がエディタで開かれるので、リンク先の内容に変更した後クローズします。

  5. src/main/resources の下に logback-develop.xml を新規作成し、リンク先の内容に変更した後クローズします。

  6. src/main/resources の下に logback-product.xml を新規作成し、リンク先の内容に変更した後クローズします。

  7. 以上で設定は完了です。動作確認します。現在 build.gradle の bootRun の jvmArgs の設定が jvmArgs = ['-Dspring.profiles.active=develop'] になっていますので、この状態で Gradle tasks View から bootRun タスクを実行します。ログに DEBUG 文が出力されます。

    f:id:ksby:20150103175415p:plain

  8. 次に build.gradle の bootRun の jvmArgs の設定を jvmArgs = ['-Dspring.profiles.active=product'] に変更してから Ctrl+F5 を押して bootRun タスクを再実行します。ログには DEBUG 文が出力されません。

    f:id:ksby:20150103175946p:plain

  9. Ctrl+F2 を押して Tomcat を停止します。

  10. build.gradle の bootRun の jvmArgs の設定を jvmArgs = ['-Dspring.profiles.active=develop'] に戻します。

JVM実行時のオプション -Dspring.profiles.active=product/develop が未指定の場合にはエラーにする

  1. Apache Commons Lang の StringUtils を使用したいのでインストールします。build.gradle をダブルクリックして開き、リンク先のその5の内容 に変更します。

  2. Gradle tasks View の左上にある「Refresh Gradle projects」アイコンをクリックして、変更した build.gradle の内容を反映します。

  3. src/main/java/ksbysample/webapp/basic の Application.java をダブルクリックして開き、リンク先のその2の内容に変更します。

  4. src/test/java/ksbysample/webapp/basic の下に ApplicationTest.java を新規作成します。今回はテスト対象のクラスからテストクラスのファイルを自動生成します。最初に src/main/java/ksbysample/webapp/basic の Application.java のクラス名にカーソルを移動した後 Alt+Enter を押してメニューを表示し、「Create Test」メニューを選択後 Enter を押します。

    f:id:ksby:20150103195455p:plain

  5. 「Create Test」ダイアログが表示されます。以下の値を変更後「OK」ボタンをクリックします。

    • 一番上の「Testing Library」を「JUnit4」に変更します。

    f:id:ksby:20150103200203p:plain

  6. src/test/java/ksbysample/webapp/basic の下に ApplicationTest.java が新規作成されエディタで開かれるので、リンク先のその1の内容に変更します。

  7. Project View の一番上の階層の ksbysample-webapp-basic を選択した後コンテキストメニューを表示し、「Run 'Tests in 'ksbysample...' with Coverage」を選択してテストを実行します。

  8. Run View が表示されテストが実行されます。全てのテストが問題なければ All Tests Passed のメッセージが表示されます。

  9. ApplicationTest.javaリンク先のその2の内容に変更してクローズします。

  10. Gradle tasks View から build タスクを実行し、BUILD SUCCESSFUL が表示されることを確認します。

lombok のインストール

  1. build.gradle をダブルクリックして開き、リンク先のその6の内容 に変更します。

  2. Gradle tasks View の左上にある「Refresh Gradle projects」アイコンをクリックして、変更した build.gradle の内容を反映します。

  3. Lombok Plugin をインストールします。メイン画面の「File」->「Settings...」メニューを選択します。

  4. 「Settings」ダイアログが表示されます。画面下の「Browse repositories...」ボタンをクリックします。

    f:id:ksby:20150103222936p:plain

  5. 「Browse Repositories」ダイアログが表示されます。画面左上の検索文字列入力欄に "Lombok" と入力して表示された Plugin 一覧から Lombok Plugin を選択し、画面左側の「Install plugin」ボタンをクリックします。

    f:id:ksby:20150103223331p:plain

  6. 「Download and Install」ダイアログが表示されます。「Yes」ボタンをクリックします。

  7. ダウンロードとインストールが完了すると画面左側の「Install plugin」ボタンが「Restart IntelliJ IDEA」ボタンに変わっていますので、クリックします。

  8. 「Settings」ダイアログに戻りますので、画面下部の「OK」ボタンをクリックします。

  9. 「Plugins Changed」ダイアログが表示されますので、「Restart」ボタンをクリックします。

  10. IntelliJ IDEA が再起動し、Lombok Plugin のインストールが完了します。

  11. ここまでで Project のディレクトリ・ファイルは以下の構成になっています。

f:id:ksby:20150103224347p:plain

GitHub へのアップロード

  1. メイン画面のメニューから「VCS」->「Import into Version Control」->「Share Project on GitHub」を選択します。

  2. 「Share Project on GitHub」ダイアログが表示されます。「Description」を記入して「Share」ボタンをクリックします。

  3. 「Add Files For Initial Commit」ダイアログが表示されます。何も変更せずに「OK」ボタンをクリックします。

    f:id:ksby:20150103231621p:plain

  4. チェックされたファイルが GitHub へアップロードされます。成功するとメイン画面の左下に「Successfully shared project on GitHub」のメッセージが表示されます。

  5. ブラウザを起動し、https://github.com/ksby にアクセスします。「Popular repositories」欄に ksbysample-webapp-basic が表示されていることを確認した後、ksbysample-webapp-basic リンクをクリックします。

  6. https://github.com/ksby/ksbysample-webapp-basicへ遷移します。ページ下部にある「Add a README」ボタンをクリックします。

  7. README の編集画面が表示されるので適宜編集した後、ページ下部の「Commit new file」ボタンをクリックします。

  8. https://github.com/ksby/ksbysample-webapp-basicへ戻り、README.md が作成されていることが確認できます。

ソースコード

build.gradle

■その1

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.0.RELEASE")
        classpath("org.springframework:springloaded:1.2.1.RELEASE")
    }
}

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

jar {
    baseName = 'ksbysample-webapp-basic'
    version =  '0.0.1-SNAPSHOT'
}

idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}

repositories {
    jcenter()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.0.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("mysql:mysql-connector-java:5.1.34")
    compile("org.mybatis:mybatis:3.2.8")
    compile("org.mybatis:mybatis-spring:1.2.2")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

■その2

bootRun {
    jvmArgs = ['-Dspring.profiles.active=product']
}

test {
    jvmArgs = ['-Dspring.profiles.active=product']
}

■その3

buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.2.0.RELEASE")
        classpath("org.springframework:springloaded:1.2.1.RELEASE")
    }
}

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

jar {
    baseName = 'ksbysample-simple'
    version =  '0.0.1-SNAPSHOT'
}

idea {
    module {
        inheritOutputDirs = false
        outputDir = file("$buildDir/classes/main/")
    }
}

repositories {
    jcenter()
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.0.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("mysql:mysql-connector-java:5.1.34")
    compile("org.mybatis:mybatis:3.2.8")
    compile("org.mybatis:mybatis-spring:1.2.2")
    compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

bootRun {
    jvmArgs = ['-Dspring.profiles.active=develop']
}

test {
    jvmArgs = ['-Dspring.profiles.active=develop']
}
  • dependencies の設定に、compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16") を追加します。
  • bootRun の設定で、-Dspring.profiles.active= に指定する文字列を develop に変更します。

■その4

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.0.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("mysql:mysql-connector-java:5.1.34")
    compile("org.mybatis:mybatis:3.2.8")
    compile("org.mybatis:mybatis-spring:1.2.2")
    compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
    compile("org.codehaus.janino:janino:2.7.5")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}
  • dependencies に compile("org.codehaus.janino:janino:2.7.5") を追加します。

■その5

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.0.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("mysql:mysql-connector-java:5.1.34")
    compile("org.mybatis:mybatis:3.2.8")
    compile("org.mybatis:mybatis-spring:1.2.2")
    compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
    compile("org.codehaus.janino:janino:2.7.5")
    compile("org.apache.commons:commons-lang3:3.3.2")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}
  • dependencies に compile("org.apache.commons:commons-lang3:3.3.2") を追加します。

■その6

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web:1.2.0.RELEASE")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("mysql:mysql-connector-java:5.1.34")
    compile("org.mybatis:mybatis:3.2.8")
    compile("org.mybatis:mybatis-spring:1.2.2")
    compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
    compile("org.codehaus.janino:janino:2.7.5")
    compile("org.apache.commons:commons-lang3:3.3.2")
    compile("org.projectlombok:lombok:1.14.8")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}
  • dependencies に compile("org.projectlombok:lombok:1.14.8") を追加します。

Application.java

■その1

package ksbysample.webapp.basic;

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);
    }

}

■その2

package ksbysample.webapp.basic;

import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.text.MessageFormat;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        String springProfilesActive = System.getProperty("spring.profiles.active");
        if (!StringUtils.equals(springProfilesActive, "product")
                && !StringUtils.equals(springProfilesActive, "develop")) {
            throw new UnsupportedOperationException(MessageFormat.format("JVMの起動時引数 -Dspring.profiles.active で develop か product を指定して下さい ( -Dspring.profiles.active={0} )。", springProfilesActive));
        }

        SpringApplication.run(Application.class, args);
    }

}

application-product.properties

spring.thymeleaf.cache = true

spring.datasource.url = jdbc:mysql://localhost/world
spring.datasource.username = root
spring.datasource.password = xxxxxxxx
spring.datasource.driverClassName = com.mysql.jdbc.Driver

spring.jpa.hibernate.ddl-auto = none
  • spring.datasource.password の値は MySQL インストール時に設定したパスワードに変更して下さい。

application-develop.properties

spring.thymeleaf.cache = false

spring.datasource.url = jdbc:log4jdbc:mysql://localhost/world
spring.datasource.username = root
spring.datasource.password = xxxxxxxx
spring.datasource.driverClassName = net.sf.log4jdbc.sql.jdbcapi.DriverSpy

spring.jpa.hibernate.ddl-auto = none

log4jdbc.log4j2.properties

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

ApplicationConfig.java

package ksbysample.webapp.basic.config;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class ApplicationConfig {

    @Bean
    @ConfigurationProperties("spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

}

logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>

    <if condition='"${spring.profiles.active}" == "develop"'>
        <then>
            <include resource="logback-develop.xml"/>
        </then>
    </if>
    <if condition='"${spring.profiles.active}" == "product"'>
        <then>
            <include resource="logback-product.xml"/>
        </then>
    </if>
</configuration>

logback-develop.xml

<?xml version="1.0" encoding="UTF-8"?>
<included>
    <!-- Spring MVC -->
    <logger name="org.springframework.web" level="DEBUG"/>

    <!-- log4jdbc-log4j2 -->
    <logger name="jdbc.sqlonly"        level="DEBUG"/>
    <logger name="jdbc.sqltiming"      level="INFO"/>
    <logger name="jdbc.audit"          level="INFO"/>
    <logger name="jdbc.resultset"      level="ERROR"/>
    <logger name="jdbc.resultsettable" level="ERROR"/>
    <logger name="jdbc.connection"     level="DEBUG"/>
</included>

logback-product.xml

<?xml version="1.0" encoding="UTF-8"?>
<included>
    <!-- Spring MVC -->
    <logger name="org.springframework.web" level="INFO"/>
</included>

ApplicationTest.java

■その1

package ksbysample.webapp.basic;

import org.junit.Rule;
import org.junit.Test;
import org.springframework.boot.test.OutputCapture;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class ApplicationTest {

    @Rule
    public OutputCapture outputCapture = new OutputCapture();

    @Test(expected = Exception.class)
    public void testApplicationProductMode() {
        System.setProperty("spring.profiles.active", "product");
        Application.main(new String[] {"--server.port=8081"});
        String output = this.outputCapture.toString();
        assertTrue(output, output.contains("Started Application"));
        System.setProperty("spring.profiles.active", "");
    }

    @Test(expected = Exception.class)
    public void testApplicationDevelopMode() {
        System.setProperty("spring.profiles.active", "develop");
        Application.main(new String[]{"--server.port=8082"});
        String output = this.outputCapture.toString();
        assertTrue(output, output.contains("Started Application"));
        System.setProperty("spring.profiles.active", "");
    }

    @Test(expected = Exception.class)
    public void testApplicationEmptyMode() {
        Application.main(new String[]{"--server.port=8083"});
        String output = this.outputCapture.toString();
        assertFalse(output, output.contains("Started Application"));
        assertTrue(output, output.contains("JVMの起動時引数 -Dspring.profiles.active で develop か product を指定して下さい"));
    }

}

■その2

package ksbysample.webapp.basic;

import org.junit.Rule;
import org.junit.Test;
import org.springframework.boot.test.OutputCapture;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public class ApplicationTest {

    @Rule
    public OutputCapture outputCapture = new OutputCapture();

/*
    @Test(expected = Exception.class)
    public void testApplicationProductMode() {
        System.setProperty("spring.profiles.active", "product");
        Application.main(new String[] {"--server.port=8081"});
        String output = this.outputCapture.toString();
        assertTrue(output, output.contains("Started Application"));
        System.setProperty("spring.profiles.active", "");
    }

    @Test(expected = Exception.class)
    public void testApplicationDevelopMode() {
        System.setProperty("spring.profiles.active", "develop");
        Application.main(new String[]{"--server.port=8082"});
        String output = this.outputCapture.toString();
        assertTrue(output, output.contains("Started Application"));
        System.setProperty("spring.profiles.active", "");
    }

    @Test(expected = Exception.class)
    public void testApplicationEmptyMode() {
        Application.main(new String[]{"--server.port=8083"});
        String output = this.outputCapture.toString();
        assertFalse(output, output.contains("Started Application"));
        assertTrue(output, output.contains("JVMの起動時引数 -Dspring.profiles.active で develop か product を指定して下さい"));
    }
*/

}

履歴

2015/01/03
初版発行。
2015/01/11
build.gradle の dependencies で spring-boot-starter-parent の記述を削除し、spring-boot-starter-web でバージョン番号を指定するよう変更 ( 1.2.1 へのバージョンアップ時に反映されなかったため )。
2015/01/12
build.gradleのその2の内容に testタスクの記述を追加。
2015/01/18
build.gradle の jar タスクで baseName = 'ksbysample-webapp-basic' へ修正。