かんがるーさんの日記

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

Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る ( 番外編 )( Java SE を 8u60 → 8u66 へ、Spring Boot を 1.2.6 → 1.2.7 へバージョンアップ )

Java SE の 8u66 が、Spring Boot の 1.2.7 がリリースされたのでバージョンアップします。

手順

1.0.x-upgrade-springboot-1.2.7 ブランチの作成

  1. IntelliJ IDEA で 1.0.x-upgrade-springboot-1.2.7 ブランチを作成します。

作成済のテストが全て正常に実行できるか確認する

  1. 最初にテストが全て正常に実行できるか確認します。Project View のルートでコンテキストメニューを表示して「Run 'Tests in 'ksbysample...' with Coverage」を選択します。

    いくつかテストが失敗したので原因を調査します。

    f:id:ksby:20151023005630p:plain

  2. 原因は "tanaka taro" のデータの expired_account が "2015-10-17 12:46:14.790000" で有効期限切れのためでした。src/test/resources/testdata/base の下の user_info.csvリンク先の内容 に変更します。

  3. 再度テストを実行します。今度は全てのテストが成功しました。

    f:id:ksby:20151023010921p:plain

Java SE 8u66 へのバージョンアップ

  1. OracleJava SE Downloads を見ると 8u65 と 8u66 の2つのバージョンがダウンロードできるようになっていました。以下のページに違いが書かれており、特に 8u66 にしない理由はないので 8u66 へバージョンアップします。

  2. jdk-8u66-windows-x64.exe をダウンロードして C:\Java\jdk1.8.0_66 へインストールした後、環境変数 JAVA_HOME のパスを C:\Java\jdk1.8.0_66 へ変更します。

    コマンドプロンプトから java -version を実行し、8u66 に変更されていることを確認します。

    f:id:ksby:20151023012532p:plain

  3. IntelliJ IDEA を再起動した後、ksbysample-webapp-lending で使用する Java SE を 8u66 へ変更します。

  4. IntelliJ IDEA のメインメニューから「File」->「Project Structure...」を選択します。

  5. 「Project Structure」ダイアログが表示されます。左側のリストから「Project Settings」->「Project」を選択し、右側の画面の「Project SDK」の中の「New...」->「JDK」を選択します。

    f:id:ksby:20151023013421p:plain

  6. 「Select Home Directory for JDK」ダイアログが表示されます。環境変数 JAVA_HOME に設定されている C:\Java\jdk1.8.0_66 が選択された状態で表示されますので、何もせずに「OK」ボタンをクリックします。

    f:id:ksby:20151023013602p:plain

  7. 「Project Structure」ダイアログに戻ります。「Project SDK」のドロップダウンリストに選択されている JDK の表示が 1.8 (java version "1.8.0_66") となっているので、1.8 → 1.8.0_66 に変更します。「Project SDK」の中の「Edit」ボタンをクリックします。

    f:id:ksby:20151023013827p:plain

  8. 「Platform Settings」->「SDKs」が選択された状態になります。画面右上の「Name」に表示されている文字列を "1.8" → "1.8.0_66" に変更します。

    f:id:ksby:20151023014129p:plain

  9. 中央のリストに表示されている「1.8.0_60」を選択した後、「Delete」ボタンをクリックして削除します。

    f:id:ksby:20151023014412p:plain

  10. 左側のリストから「Project Settings」->「Project」を選択し、右側の画面の「Project language level」のドロップダウンリストで「SDK default (8 - Lambdas, type annotations etc.)」を選択します。選択後、「OK」ボタンをクリックして「Project Structure」ダイアログを閉じます。

    f:id:ksby:20151023014739p:plain

  11. メイン画面に戻ると画面下部に処理進行中のメッセージが表示されますので、終了するまで待機します。

  12. Build 及びテストで問題がないか確認します。Gradle projects View から clean タスクを実行し、"BUILD SUCCESSFUL" のメッセージが出力されることを確認します。

    f:id:ksby:20151023015647p:plain

  13. メインメニューから「Build」->「Rebuild Project」を選択して build し直し、エラーメッセージが何も表示されないことを確認します。

    f:id:ksby:20151023015846p:plain

  14. Gradle projects View から build タスクを実行して "BUILD SUCCESSFUL" のメッセージが表示されることを確認します。

    f:id:ksby:20151023020207p:plain

  15. Project View のルートでコンテキストメニューを表示して「Run 'Tests in 'ksbysample...' with Coverage」を選択し、テストが全て成功することを確認します。

    f:id:ksby:20151023020503p:plain

  16. 特に問題は発生しませんでした。8u66 で開発を進めたいと思います。

Spring Boot 1.2.7 へのバージョンアップ

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

  2. Gradle projects View の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

  3. Project View の External Libraries に表示される org.springframework.boot のライブラリのバージョンが 1.2.7.RELEASE になっていることを確認します。

    f:id:ksby:20151023023321p:plain

  4. Build 及びテストで問題がないか確認します。Gradle projects View から clean タスクを実行し、"BUILD SUCCESSFUL" のメッセージが出力されることを確認します。

    f:id:ksby:20151023023610p:plain

  5. メインメニューから「Build」->「Rebuild Project」を選択して build し直し、エラーメッセージが何も表示されないことを確認します。

    f:id:ksby:20151023030052p:plain

  6. Gradle projects View から build タスクを実行して "BUILD SUCCESSFUL" のメッセージが表示されることを確認します。

f:id:ksby:20151023030313p:plain

  1. Project View のルートでコンテキストメニューを表示して「Run 'Tests in 'ksbysample...' with Coverage」を選択し、テストが全て成功することを確認します。

    f:id:ksby:20151023030812p:plain

  2. Gradle projects View から bootRun タスクを実行して Tomcat を起動した後、ブラウザから画面の動作に問題がないか確認します。確認後、Run View で Ctrl+F2 を押して Tomcat を停止します。

  3. 特に問題は出なかったのでこのまま進めます。

commit、Push、Pull Request、マージ

  1. commit、GitHub へ Push、1.0.x-upgrade-springboot-1.2.7 -> 1.0.x へ Pull Request、1.0.x でマージ、1.0.x-upgrade-springboot-1.2.7 ブランチを削除、をします。

ソースコード

user_info.csv

user_id,username,password,mail_address,enabled,cnt_badcredentials,expired_account,expired_password
1,"tanaka taro",$2a$10$LKKepbcPCiT82NxSIdzJr.9ph.786Mxvr.VoXFl4hNcaaAn9u7jje,tanaka.taro@sample.com,1,0,"2016-10-17 12:46:14.790000","2016-08-18 12:46:30.354000"
2,"suzuki hanako",$2a$10$.fiPEZ155Rl41/e.mdM3A.mG0iEQNPmhjFL/aIiV8dZnXsCd.oqji,suzuki.hanako@test.co.jp,1,0,"2015-09-30 22:19:02.783000","2016-08-31 22:19:22.176000"
3,"kimura masao",$2a$10$yP1dLPIq9j7WQVH6ruSwkepf8jIkPxTtncbSnYM0/jAGQ4HCQO8R.,kimura.masao@test.co.jp,0,0,"2015-12-31 22:30:54.425000","2015-10-15 22:31:03.316000"
4,"endo yoko",$2a$10$PVFe8Lh1Pkjc54DWS9mJL.q407x51ZK8MSXhwuTF9zxCnnt80LKwy,endo.yoko@sample.com,1,0,"2015-01-10 22:31:55.454000","2015-12-31 22:32:11.886000"
5,"sato masahiko",$2a$10$qIU0kM/p1pa7KSIjF6YA4eORd2wL1Eo6TlvH./DmPs7D.xXQPEq7a,sato.masahiko@sample.com,1,0,"2015-12-31 22:34:14.827000","2014-08-05 22:34:22.818000"
6,"takahasi naoko",$2a$10$iXp/d4wXmfaLKTjQKBvik.kETgx4nQ.FL1NjYt4ALJOGSyVOSchW6,takahasi.naoko@test.co.jp,1,0,"2015-12-01 22:39:48.475000","2015-11-10 22:39:55.422000"
7,"kato hiroshi",$2a$10$g5dtFTtNBdJO30aHg50rluGNa2pEAzArcwYkYyCG91ElBZPs9sDi2,kato.hiroshi@sample.com,0,5,"2014-01-01 15:58:53.295000","2013-12-31 15:59:07.668000"
  • "tanaka taro" の expired_account を "2015-10-17 12:46:14.790000""2016-10-17 12:46:14.790000" へ変更します。

build.gradle

■その1

buildscript {
    ext {
        springBootVersion = '1.2.7.RELEASE'
    }
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/repo/" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath("io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE")
        // for Grgit
        classpath("org.ajoberstar:grgit:1.4.1")
        // Gradle Download Task
        classpath("de.undercouch:gradle-download-task:2.0.0")
    }
}
  • springBootVersion を 1.2.6.RELEASE → 1.2.7.RELEASE へ変更します。
  • org.ajoberstar:grgit を 1.4.0 → 1.4.1 へ変更します。

■その2

dependencies {
    def jdbcDriver = "org.postgresql:postgresql:9.4-1204-jdbc41"

    // spring-boot-gradle-plugin によりバージョン番号が自動で設定されるもの
    // Appendix E. Dependency versions ( http://docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html ) 参照
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-thymeleaf")
    compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity3")
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile("org.springframework.boot:spring-boot-starter-velocity")
    compile("org.springframework.boot:spring-boot-starter-mail")
    compile("org.springframework.boot:spring-boot-starter-security")
    compile("org.springframework.boot:spring-boot-starter-redis")
    compile("org.springframework.boot:spring-boot-starter-amqp")
    compile("org.codehaus.janino:janino")
    compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310")
    compile("com.fasterxml.jackson.dataformat:jackson-dataformat-xml")
    testCompile("org.springframework.boot:spring-boot-starter-test")
    // (ここから) gradle でテストを実行した場合に spring-security-test-4.0.2.RELEASE.jar しか classpath に指定されず
    // テストが失敗したため、3.2.8.RELEASE を明記している
    testCompile("org.springframework.security:spring-security-core:3.2.8.RELEASE")
    testCompile("org.springframework.security:spring-security-web:3.2.8.RELEASE")
    // (ここまで) ------------------------------------------------------------------------------------------------------
    testCompile("org.springframework.security:spring-security-test:4.0.2.RELEASE")
    testCompile("org.yaml:snakeyaml")

    // spring-boot-gradle-plugin によりバージョン番号が自動で設定されないもの
    compile("${jdbcDriver}")
    compile("org.seasar.doma:doma:2.5.0")
    compile("org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16")
    compile("org.apache.commons:commons-lang3:3.4")
    compile("org.projectlombok:lombok:1.16.6")
    compile("com.google.guava:guava:18.0")
    compile("org.springframework.session:spring-session:1.0.1.RELEASE")
    compile("org.simpleframework:simple-xml:2.7.1")
    compile("com.univocity:univocity-parsers:1.5.6")
    testCompile("org.dbunit:dbunit:2.5.1")
    testCompile("com.icegreen:greenmail:1.4.1")
    testCompile("org.assertj:assertj-core:3.2.0")
    testCompile("com.jayway.jsonpath:json-path:2.0.0")
    testCompile("org.jmockit:jmockit:1.19")

    // for Doma-Gen
    domaGenRuntime("org.seasar.doma:doma-gen:2.5.0")
    domaGenRuntime("${jdbcDriver}")
}
  • org.postgresql:postgresql を 9.4-1203-jdbc41 → 9.4-1204-jdbc41 へ変更します。
  • org.seasar.doma:doma を 2.4.1 → 2.5.0 へ変更します。
  • org.projectlombok:lombok を 1.16.4 → 1.16.6 へ変更します。
  • com.fasterxml.jackson.datatype:jackson-datatype-jsr310 と com.fasterxml.jackson.dataformat:jackson-dataformat-xmlAppendix E. Dependency versions に記載されていたので ( 記載されていることに気づいていませんでした。。。 )、バージョン番号を削除して上の「spring-boot-gradle-plugin によりバージョン番号が自動で設定されるもの」に移動します。
  • org.seasar.doma:doma-gen は 2.4.1 → 2.5.0 へ変更します。