gradle
SpringBoot
Java9
Springfox

SpringBoot 2.0 + Java9 の試作アプリ作成しました


更新履歴

日付
内容

2018.01.29
Spring Boot 2.0 M7 にて作成

2018.02.10
Spring Boot 2.0 RC1 にて作成

2018.02.25
Spring Boot 2.0 RC2 にて作成

2018.03.01
Spring Boot 2.0 GA にて作成

2018.05.12
Spring Boot 2.02 にて作成

2018.06.30
Spring Boot 2.03 にて作成


はじめに

既存アプリのSpringBoot 1.5 -> 2.0化に失敗したので、

ひとまず新規でWebApiを作成することにしました。

課題は山積みですが、いったんは表題の組み合わせで動作しております。

Java9化を進めたいかたには参考になるかと思います。

※Java9化の鍵はbuild.gradleに集約されております。


  • FW


    • Spring Boot 2.0 M7

    • Spring Boot 2.0 RC1

    • Spring Boot 2.0 RC2

    • Spring Boot 2.0 GA

    • Spring Boot 2.02

    • Spring Boot 2.03



  • Libraries


    • Flyway

    • Lombok

    • SpringDataJpa

    • SpringFox



  • JDK


    • 9.0.4(Oracle)



  • Build


    • Gradle 4.5.1

    • Gradle 4.6

    • Gradle 4.7

    • Gradle 4.8.1



  • IDE


    • IntelliJ IDEA Community 2017.3

    • IntelliJ IDEA Community 2018.1



サンプル・コード


乗り越えていない課題


modelmapper

skipしたいけどうまく動かない。。。


module-info.java

作成していません。

なので起動引数に今後削除予定のものを記載しています。


SpringFox DataRest

2.9で動かない。。。


メタモデルクラス

IntelliJでの設定方法わからず断念しました。(java9とは関係ない)


つまづいた箇所


Actuator

yamlで定義するプロパティ値がかなり変更されているようです。

以前出力していた内容がどれに対応しているか把握しきれていません。


javadoc

build.gradleのサンプルがみつからず、1時間ほどかかりました。


build.gradle

tasks.withType(Javadoc) {

doFirst {
options.addStringOption('-add-modules', 'java.xml.bind,java.xml.ws.annotation')
}
}

※ "module-info.java"作成したらこの箇所は変更する気が


JAXB

Spring Boot with Java 9に記載あるように、dependencyに追加すればよいです。

ですが、issuesに上がっているので手で書かなくもよくなるかも?

Provide dependency management for JAXB as it's not provided with Java9 anymore


build.gradle

compile("javax.xml.bind:jaxb-api:2.3.0")



junit5化

ライブラリのversionを4.x -> 5.xにするのかと思ってましたが違うようですね。


build.gradle

// Junit 5

testCompile("org.junit.platform:junit-platform-launcher:1.1.1")
testRuntimeOnly("org.junit.platform:junit-platform-engine:1.1.1")
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")


lombok

~~1.16.18 -> 1.16.20 に変更したらあっさり解消しました。

ただ、着手開始時には1.16.20はリリースされていませんでしたので、解消されない時間が存在しています。

Spring Boot 2.0 RC1のdependency-managementにより、

lombokはデフォルトで1.16.20を取得するようになりました。

なので依存関係のバージョンをbuild.gradleに手入力せずともjava9化できるようになりました。


Optional

nullでない時に例外投げたい。。。

下記記載方法はダサい。

Optional<GoodsTbl> optionalCode = service.findByCode(goodsCode);

if (optionalCode.isPresent()) {// goodsCode(unique制約)の存在チェック
throw new ConflictException("goodsCode", "CODEが重複しています。");
}


O/R Mapper

flyway、mysql5.7、SpringDataJPAの組み合わせで起動中に大量の警告が出ていました。

現在は警告消しているので、どこかの記述が誤っている可能性がかなり有ります。

時間のある時に調査したいです。


build.gradle

// Flyway

compile("org.flywaydb:flyway-core")
testCompile("org.flywaydb.flyway-test-extensions:flyway-spring-test:5.0.0")


今後の取り組み


  1. CRUDの残りの機能の作成

  2. リファクタリング

  3. 続)SpringBoot 2.x対応

  4. Testの追加

  5. Productの追加