Spring Boot 2.0.x の Web アプリを 2.1.x へバージョンアップする ( その2 )( Gradle を 4.10.3 → 5.2 にバージョンアップする )
概要
記事一覧はこちらです。
Spring Boot 2.0.x の Web アプリを 2.1.x へバージョンアップする ( その1 )( 概要 ) の続きです。
- 今回の手順で確認できるのは以下の内容です。
- Gradle の 5 系がリリースされていますので、Gradle を 4.10.3 → 5.2 にバージョンアップします。
参照したサイト・書籍
Upgrading your build from Gradle 4.x to 5.0
https://docs.gradle.org/current/userguide/upgrading_version_4.htmlUpgrading your build from Gradle 5.x
https://docs.gradle.org/current/userguide/upgrading_version_5.html
目次
- 2.1.x ブランチの作成
- Gradle を 4.10.3 → 5.0 へバージョンアップする。。。が compileTestJava で lombok が適用されない
- Gradle を 5.0 → 5.2 へバージョンアップするも状況変わらず
- build.gradle に testAnnotationProcessor の定義を追加する
- lombok の設定で annotationProcessor, testAnnotationProcessor や compileOnly, testCompileOnly を併記しなくてもよいように build.gradle を変更する
- gradlew.bat の DEFAULT_JVM_OPTS の設定を変更する
- Gradle 5 の BOM import 機能に切り替えて io.spring.dependency-management plugin を削除しよう。。。と思ったが止める
手順
2.1.x ブランチの作成
master から 2.1.x ブランチを、2.1.x から feature/133-issue ブランチを作成します。
Gradle を 4.10.3 → 5.0 へバージョンアップする。。。が compileTestJava で lombok が適用されない
まずは Upgrading your build from Gradle 4.x to 5.0 に従い Gradle を 5.0 へバージョンアップします。
gradle help --scan
コマンドを実行します。Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no]
のメッセージが表示されたら yes を入力します。
Publishing build scan...
のメッセージの下に URL が表示されますので、その URL にアクセスしてメールアドレスを入力します。
メールアドレスに「Your build scan for 'ksbysample-webapp-lending' from ...」という件名のメールが届きますので、その中の「Discover your build」ボタンをクリックして「Build Scan」画面を表示します。何か対応が必要な場合には画面左側の「Console log」の下に「Deprecations」が表示されるとのことですが、表示されませんでしたので次に進みます。
build.gradle の wrapper タスクの記述を以下のように変更します。
wrapper {
gradleVersion = "5.0"
distributionType = Wrapper.DistributionType.ALL
}
gradleVersion = "4.10.3"
→gradleVersion = "5.0"
に変更します。
コマンドプロンプトから gradlew wrapper --gradle-version 5.0
、gradlew --version
コマンドを実行します。
gradle/wrapper/gradle-wrapper.properties は以下の内容になります。
distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると test のコンパイルが失敗して "BUILD FAILED" のメッセージが出力されました。
コンパイルが失敗したのは src/test/java/ksbysample/test/ItemTypeStringToCodeConversion.java の下の赤枠の箇所ですが、どうも lombok の @Getter アノテーションが適用されていないようです。
原因がよく分からないので、一旦 gradle を 5.2 まで上げてみます。
Gradle を 5.0 → 5.2 へバージョンアップするも状況変わらず
build.gradle の wrapper タスクの記述を以下のように変更します。
wrapper {
gradleVersion = "5.2"
distributionType = Wrapper.DistributionType.ALL
}
gradleVersion = "5.0"
→gradleVersion = "5.2"
に変更します。
コマンドプロンプトから gradlew wrapper --gradle-version 5.2
、gradlew --version
コマンドを実行します。
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project 実行 → build タスクを実行して見ましたが状況が変わりませんでした。。。
build.gradle に testAnnotationProcessor の定義を追加する
Upgrading your build from Gradle 4.x to 5.0、Upgrading your build from Gradle 5.x には解決しそうな記述は見当たらず Web で調べてもよく分からなかったのですが、build.gradle を見ていてふと気づいたことがありました。
今は build.gradle の dependencies block に lombok の設定を以下のように記述しているのですが、
// for lombok annotationProcessor("org.projectlombok:lombok:${lombokVersion}") compileOnly("org.projectlombok:lombok:${lombokVersion}") testCompileOnly("org.projectlombok:lombok:${lombokVersion}")
compileOnly に testCompileOnly があるように、まさか annotationProcessor にも testAnnotationProcessor があるのかな。。。と思って入力してみたところ、ありました! ということは testAnnotationProcessor の記述がないので compileTestjava タスクで lombok のアノテーションプロセッサが実行されていなかったのでしょう。
build.gradle に testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}")
を追加してから、
// for lombok annotationProcessor("org.projectlombok:lombok:${lombokVersion}") testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}") compileOnly("org.projectlombok:lombok:${lombokVersion}") testCompileOnly("org.projectlombok:lombok:${lombokVersion}")
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると無事 "BUILD SUCCESSFUL" のメッセージが出力されました。
lombok の設定で annotationProcessor, testAnnotationProcessor や compileOnly, testCompileOnly を併記しなくてもよいように build.gradle を変更する
もう少し調べてみたところ compileOnly dependencies are not available in tests を見つけました。build.gradle の configurations block に testImplementation.extendsFrom compileOnly
を記述しておくと compileOnly と testCompileOnly を併記しなくても良くなるようです。
build.gradle を以下のように変更します。
configurations { // annotationProcessor と testAnnotationProcessor、compileOnly と testCompileOnly を併記不要にする testAnnotationProcessor.extendsFrom annotationProcessor testImplementation.extendsFrom compileOnly // for Doma 2 domaGenRuntime } .......... dependencies { .......... // for lombok // testAnnotationProcessor、testCompileOnly を併記しなくてよいよう configurations で設定している annotationProcessor("org.projectlombok:lombok:${lombokVersion}") compileOnly("org.projectlombok:lombok:${lombokVersion}")
- configurations block に以下の2行を追加します。
testImplementation.extendsFrom compileOnly
testAnnotationProcessor.extendsFrom annotationProcessor
- dependencies block の lombok の設定から以下の2行を削除します。
testAnnotationProcessor("org.projectlombok:lombok:${lombokVersion}")
testCompileOnly("org.projectlombok:lombok:${lombokVersion}")
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新した後、clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると "BUILD SUCCESSFUL" のメッセージが出力されました。
gradlew.bat の DEFAULT_JVM_OPTS の設定を変更する
Gradle をバージョンアップした際に変更されたファイルを確認したところ、gradlew.bat 内の DEFAULT_JVM_OPTS
が以前は何も設定されていなかったのが -Xmx64m
が設定されるようになっていました。
さすがに -Xmx64m
は小さいので set DEFAULT_JVM_OPTS="-Xmx64m"
→ set DEFAULT_JVM_OPTS="-Xmx4096m"
に変更します。
Gradle 5 の BOM import 機能に切り替えて io.spring.dependency-management plugin を削除しよう。。。と思ったが止める
Gradle 5 から io.spring.dependency-management plugin を使用しなくても BOM を直接参照できるようになりました。BOM import に記述があります。Gradle 5 の機能に切り替えてみます。
build.gradle を以下のように変更します。
plugins { id "java" id "eclipse" id "idea" id "org.springframework.boot" version "2.0.8.RELEASE" id "groovy" id "checkstyle" id "com.github.spotbugs" version "1.6.8" id "pmd" id "net.ltgt.errorprone" version "0.0.16" id "de.undercouch.download" version "3.4.3" id "com.gorylenko.gradle-git-properties" version "2.0.0-beta1" } .......... dependencies { def jdbcDriver = "org.postgresql:postgresql:42.2.5" def spockVersion = "1.2-groovy-2.5" def domaVersion = "2.21.0" def lombokVersion = "1.18.4" def errorproneVersion = "2.3.1" def powermockVersion = "2.0.0" def spotbugsVersion = "3.1.10" // BOM // https://repo.spring.io/release/org/springframework/boot/spring-boot-dependencies/2.0.8.RELEASE/spring-boot-dependencies-2.0.8.RELEASE.pom implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) // BOM によりバージョン番号が自動で設定されるもの // Appendix F. Dependency versions ( https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-dependency-versions.html ) 参照 implementation("org.springframework.boot:spring-boot-starter-web") .......... // BOM によりバージョン番号が自動で設定されないもの、あるいは最新バージョンを指定したいもの .......... testImplementation("cglib:cglib-nodep:3.2.10") testImplementation("org.codehaus.groovy:groovy-all:2.5.4") testImplementation("org.spockframework:spock-core:${spockVersion}") ..........
- plugins block から
id "io.spring.dependency-management" version "1.0.6.RELEASE"
を削除します。 - dependencies block の上に記述していた dependencyManagement block を削除します。
- dependencies block の以下の点を変更します。
implementation platform(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES)
を追加します。implementation platform(...)
の方法ではbomProperty "groovy.version", "2.5.4"
やext["groovy.version"] = "2.5.4"
を記述することで BOM 内の property の値を変更することができないので、testImplementation("org.codehaus.groovy:groovy-all:2.5.4")
を追加して groovy 及び関連ライブラリのバージョンを 2.5.4 にします。
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。io.spring.dependency-management plugin の時と gradlew dependencies
コマンドの実行結果を比較してみたところ、主に以下の点が異なっていました。
- 以前は
org.slf4j:slf4j-api
のバージョンが1.8.0-beta2 -> 1.7.25
にダウングレードされていたのですが、今度は1.8.0-beta2
になっていました。 - compileClasspath、default、runtimeClasspath 等に
org.springframework.boot:spring-boot-dependencies:2.0.8.RELEASE
と依存しているライブラリが追加されていました。 - implementation に
org.springframework.boot:spring-boot-dependencies:2.0.8.RELEASE
が追加されていました(依存しているライブラリはなし)。 org.apache.tomcat.embed:tomcat-embed-core:8.5.37
の依存関係にorg.apache.tomcat:tomcat-annotations-api:8.5.37
が表示されるようになりました。org.thymeleaf:thymeleaf:3.0.11.RELEASE
の依存関係に以下の2つのライブラリが表示されるようになりました。ognl:ognl:3.1.12
org.javassist:javassist:3.20.0-GA -> 3.22.0-GA
- compileOnly に
org.springframework.boot:spring-boot-configuration-processor
が表示されるのですが、以前はorg.springframework.boot:spring-boot-configuration-processor -> 2.0.8.RELEASE
と表示されていたのですがorg.springframework.boot:spring-boot-configuration-processor FAILED
と表示されるようになりました。
thymeleaf の依存関係に ognl が出てくるのと org.springframework.boot:spring-boot-configuration-processor のバージョンが解決出来ず FAILED になるのが気になります。今回は io.spring.dependency-management plugin を使う方式に戻します。
履歴
2019/02/07
初版発行。
Spring Boot 2.0.x の Web アプリを 2.1.x へバージョンアップする ( その1 )( 概要 )
概要
記事一覧はこちらです。
- 「Spring Boot で書籍の貸出状況確認・貸出申請する Web アプリケーションを作る」で作成した Web アプリケーション ( ksbysample-webapp-lending ) の Spring Boot のバージョンを 2.0.8 → 2.1.x へバージョンアップします。
- 進め方は以下の方針とします。
- Git のブランチは 2.1.x を作成して、そちらで作業します。Spring Boot のバージョンと合わせます。
- 最初に Gradle のバージョンを 4.10.3 → 5.x へバージョンアップします。
- 次に Spring Boot のバージョン番号を 2.1.x にします。
- Spring Initializr で 2.1.x のプロジェクトを作成して、修正した方がよさそうな点があれば反映します。
- ライブラリは最新バージョンにアップデートします。
- プロジェクトを build し直してエラーが出る点があれば修正し、まずはここまでで動くようにします。
- その後で 2.1 系ではこう書くべきという点があるか確認し、変更した方がよいところを修正します。
- 最後に Java SE を Oracle の 8 から AdoptOpenJDK の 11 に変更します。
2.1 の Release Notes はこちらです。
Spring Boot 2.1 Release Notes
https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.1-Release-Notes
履歴
2019/02/06
初版発行。
Spring Boot 2.0.x の Web アプリを 2.1.x へバージョンアップする ( 大目次 )
- その1 ( 概要 )
- その2 ( Gradle を 4.10.3 → 5.2 にバージョンアップする )
- その3 ( build.gradle を変更する )
- その4 ( テストが大量に失敗する原因を解消する )
- その5 ( テストが大量に失敗する原因を解消する2 )
- 番外編 ( IntelliJ IDEA の Class Diagram 生成機能メモ書き )
- 番外編 ( Spring Initializr で作成したプロジェクトで Thymeleaf テンプレートのコード補完を有効にするには? )
- その6 ( Thymeleaf テンプレートの html タグの属性を変更し、メトリックスのタグの定義場所を変更する )
- その7 ( Gradle を 5.2 → 5.2.1 へ、Spring Boot を 2.1.2 → 2.1.3 へバージョンアップする )
- その8 ( JUnit 5 へバージョンアップ。。。したいが @RunWith(Enclosed) + @Unroll + useJUnitPlatform() を組み合わせるとテストが終わらない )
- その9 ( JUnit 5 へバージョンアップ。。。@RunWith(Enclosed) + @Unroll + useJUnitPlatform() の組み合わせでテストが終わらない問題を解決する )
- その10 ( @Rule を使用していないテストを JUnit 5 のテストに書き直す+JUnit 5 の Parallel 実行を試してみる )
- その11 ( @Rule を使用しているテストを JUnit 5 のテストに書き直す )
- その12 ( @Rule を使用しているテストを JUnit 5 のテストに書き直す2 )
- その13 ( @WebMvcTest、@WithAnonymousUser、@WithMockUser を使ってみる )
- その14 ( Docker で複数の Tomcat を起動して動作確認する )
- その15 ( JDK を 8u202 → 11.0.2+9 に変更する )
- その16 ( JDK を 8u202 → 11.0.2+9 に変更する2 )
- その17 ( JDK 11 環境下で error-prone を復活させる )
- 番外編 ( テストクラス内の @Component を付与したクラスを Bean として登録するには? )
- その18 ( Gradle を 5.2.1 → 5.3.1 へ、Spock を 1.2 → 1.3 へ、JUnit 5 を 5.4.0 → 5.4.1 へバージョンアップする )
- その19 ( dependency-management plugin を 1.0.6 → 1.0.7 へ、Checkstyle を 8.17 → 8.19 へ、PMD を 6.11.0 → 6.13.0 へバージョンアップする )
- その20 ( Spring Boot を 2.1.3 → 2.1.4 へバージョンアップする )
- 感想
Java SE を 8u192 → 8u202 へ、IntelliJ IDEA を 2018.3.3 → 2018.3.4 へバージョンアップ
Java SE を 8u192 → 8u202 へバージョンアップする
※ksbysample-webapp-lending プロジェクトを開いた状態でバージョンアップしています。
Oracle の Java SE Downloads を見ると 8u202 がダウンロードできるようになっていましたので、8u202 へバージョンアップします。
jdk-8u202-windows-x64.exe をダウンロードして D:\Java\jdk1.8.0_202 へインストールした後、環境変数 JAVA_HOME のパスを D:\Java\jdk1.8.0_202 へ変更します。
コマンドプロンプトから
java -version
を実行し、1.8.0_202
に変更されていることを確認します。開いているプロジェクトを閉じて「Welcome to IntelliJ IDEA」ダイアログを表示します。
ダイアログ下部の「Configure」-「Project Defaults」-「Project Structure」を選択します。
「Default Project Structure」ダイアログが表示されます。画面左側で「Project Settings」-「Project」を選択後、画面右側の「Project SDK」の「New...」ボタンをクリックし、表示されるメニューから「JDK」を選択します。
「Select Home Directory for JDK」ダイアログが表示されます。D:\Java\jdk1.8.0_202 を選択した後、「OK」ボタンをクリックします。
「Default Project Structure」ダイアログに戻るので、今度は「Project SDK」の「Edit」ボタンをクリックします。
画面左側で「Platform Settings」-「SDKs」が選択された状態になるので、画面右上の入力フィールドで "1.8" → "1.8.0_202" へ変更します。
次に中央のリストから「1.8.0_192」を選択した後、リストの上の「-」ボタンをクリックして削除します。
「OK」ボタンをクリックして「Default Project Structure」ダイアログを閉じます。
「Welcome to IntelliJ IDEA」ダイアログに戻ったら、ksbysample-webapp-lending プロジェクトを開きます。
IntelliJ IDEA のメイン画面が開いたら、メニューから「File」-「Project Structure...」を選択します。
「Project Structure」ダイアログが表示されます。以下の画像の状態になっているので、
※今回から「Project language level」に選択されている設定が「1.3 - Plain old Java」ではなく「SDK default」に変わっていました。
「Project SDK」を選択し直します。「Project language level」は「Project SDK」を「1.8.0_202」に変更したら「SDK default (8 - Lambdas, type annotations etc.)」が表示されました。
「OK」ボタンをクリックして「Project Structure」ダイアログを閉じます。
メイン画面に戻ると画面右下に「Indexing...」の表示が出るので、終了するまで待ちます。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行して、"BUILD SUCCESSFUL" のメッセージが出力されることを確認します。
Project Tool Window で src/test を選択した後、コンテキストメニューを表示して「Run ‘All Tests’ with Coverage」を選択し、テストが全て成功することを確認します。
特に問題は発生しませんでした。8u202 で開発を進めます。
IntelliJ IDEA を 2018.3.3 → 2018.3.4 へバージョンアップする
IntelliJ IDEA の 2018.3.4 がリリースされているのでバージョンアップします。
- IntelliJ IDEA 2018.3.4 is released!
https://blog.jetbrains.com/idea/2019/01/intellij-idea-2018-3-4-is-released/
※ksbysample-webapp-lending プロジェクトを開いた状態でバージョンアップしています。
IntelliJ IDEA のメインメニューから「Help」-「Check for Updates...」を選択します。
「IDE and Plugin Updates」ダイアログが表示されます。左下に「Update and Restart」ボタンが表示されていますので、「Update and Restart」ボタンをクリックします。
Plugin の update も表示されました。このまま「Update and Restart」ボタンをクリックします。
Patch がダウンロードされて IntelliJ IDEA が再起動します。
IntelliJ IDEA が起動すると画面下部に「Indexing…」のメッセージが表示されますので、終了するまで待機します。
IntelliJ IDEA のメインメニューから「Help」-「About」を選択し、2018.3.4 へバージョンアップされていることを確認します。
Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行して、"BUILD SUCCESSFUL" のメッセージが出力されることを確認します。
Project Tool Window で src/test を選択した後、コンテキストメニューを表示して「Run 'All Tests' with Coverage」を選択し、テストが全て成功することを確認します。
Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( 感想 )
記事一覧はこちらです。
さすがにメジャーバージョンアップだけあって変更点が多かったです。Spring Boot 2.0 Migration Guide が用意されているので、読みながら対応すればそれ程困らないでしょう。バージョンアップに伴う修正ボリュームはそれなりにありますが、難しいイメージはないですね。
Spring Actuator を入れて Prometheus+Grafana と連携してメトリックスを表示するのが気に入りました! 簡単にメトリックスを表示できるようになるのは便利ですね。個人的には Reactive 対応よりも嬉しい機能かもしれません。
PC を Windows 10 に変えたので、今回は開発環境一式を Docker で起動するようにしてみました。Spring Boot 2 のバージョンアップよりも Docker 対応していた期間の方が長かったです。Docker でサーバを起動する環境を構築できましたが、反省点もいろいろありました。
- 市販されている書籍を何冊か読んではいたのですが、実際やってみると結構苦労しますね。Redis Cluster はすごく面倒でした。。。 RabbitMQ なんてほぼコピペですしね。「無理にクラスタ構成にする必要はないんじゃないかな」と何度思ったことか。。。
- 単一インスタンスのサーバを構築するよりマルチインスタンス/クラスタ構成のサーバを構築した方がいろいろ調べることになってスキルアップする気がします。
- 有名なソフトの Official イメージの Dockerfile は目を通した方がいいですね。自分で Dockerfile を書く時も Official イメージの Dockerfile を参考にしました。
次は 2.1.x へのバージョンアップをやる予定です。Gradle も 5.x へバージョンアップし、Java も AdoptOpenJDK の 11 へ切り替えます。
Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( その36 )( Windows のサービスから起動して動作確認する )
概要
記事一覧はこちらです。
参照したサイト・書籍
目次
手順
jar ファイルを作成、配置する
docker-compose up -d
でコンテナを起動した後、clean タスク実行 → Rebuild Project 実行 → build タスク実行します。
C:\project-springboot\ksbysample-webapp-lending\build\libs の下に ksbysample-webapp-lending-2.0.8-RELEASE.jar が作成されますので、C:\webapps\ksbysample-webapp-lending\lib の下に配置します。
webapps/ksbysample-webapp-lending/bat/webapp_startup.bat を以下の内容に変更した後、C:\webapps\ksbysample-webapp-lending\bat の下にコピーします。
@echo on setlocal set JAVA_HOME=D:\Java\jdk1.8.0_192 set PATH=%JAVA_HOME%\bin;%PATH% set WEBAPP_HOME=D:\webapps\ksbysample-webapp-lending set WEBAPP_JAR=ksbysample-webapp-lending-2.0.8-RELEASE.jar set LOGS_DIR=%WEBAPP_HOME%\logs set PATH_HEAPDUMPFILE=%LOGS_DIR%\heapdump.hprof set PATH_ERRORFILE=%LOGS_DIR%\hs_err.log cd /d %WEBAPP_HOME% java -server ^ -Xms1024m -Xmx1024m ^ -XX:MaxMetaspaceSize=384m ^ -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled ^ -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=75 ^ -XX:+ScavengeBeforeFullGC -XX:+CMSScavengeBeforeRemark ^ -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps ^ -Xloggc:%WEBAPP_HOME%/logs/gc.log ^ -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M ^ -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%PATH_HEAPDUMPFILE% ^ -XX:+CrashOnOutOfMemoryError ^ -XX:ErrorFile=%PATH_ERRORFILE% ^ -Dsun.net.inetaddr.ttl=100 ^ -Dcom.sun.management.jmxremote ^ -Dcom.sun.management.jmxremote.port=7900 ^ -Dcom.sun.management.jmxremote.ssl=false ^ -Dcom.sun.management.jmxremote.authenticate=false ^ -Dspring.profiles.active=product ^ -jar lib\%WEBAPP_JAR% set YYYYMMDD=%date:~0,4%%date:~5,2%%date:~8,2% set HHMMSS=%time:~0,8% set HHMMSS=%HHMMSS::=% set HHMMSS=%HHMMSS: =% if exist %PATH_HEAPDUMPFILE% rename %PATH_HEAPDUMPFILE% heapdump_%YYYYMMDD%%HHMMSS%.hprof if exist %PATH_ERRORFILE% rename %PATH_ERRORFILE% hs_err_%YYYYMMDD%%HHMMSS%.log
サービスに登録する
コマンドプロンプトを「管理者として実行...」モードで起動した後、以下のコマンドを実行します。
> cd /d D:\webapps\ksbysample-webapp-lending\nssm
> nssm.exe install ksbysample-webapp-lending
「NSSM service installer」画面が表示されます。以下の画像の値を入力した後、「Install service」ボタンをクリックします。サービスの登録に成功すると「Service "ksbysample-webapp-lending" installed successfully!」のダイアログが表示されますので「OK」ボタンをクリックします。
- 「Path」に
D:\webapps\ksbysample-webapp-lending\bat\webapp_startup.bat
を入力します。 - 「Startup directory」に
D:\webapps\ksbysample-webapp-lending\bat
を入力します。
動作確認
動作確認前に DB のデータを以下の状態にします。
- user_info, user_role テーブルのデータは開発時のままにします。
- lending_app, lending_book, library_forsearch テーブルのデータはクリアします。
サービス画面を開きます。サービス一覧から「ksbysample-webapp-lending」を選択し、「サービスの開始」リンクをクリックしてサービスを開始します。
D:\webapps\ksbysample-webapp-lending\logs の下の ksbysample-webapp-lending.log をエディタで開き、最後に "Started Application in ..." のログが出力されていることを確認します。
以下の手順で動作確認します ( 画面キャプチャは省略します )。
- ブラウザを起動して http://localhost:8080/ にアクセスしてログイン画面を表示します。tanaka.taro@sample.com / taro でログインします。
- 検索対象図書館登録画面が表示されます。"東京都" で検索した後、一覧表示されている図書館から「国立国会図書館東京本館」を選択します。
- ログアウトします。
- ログイン画面に戻るので suzuki.hanako@test.co.jp / hanako でログインします。
- 貸出希望書籍 CSV ファイルアップロード画面が表示されます。以下の内容が記述された CSV ファイルをアップロードします。
"ISBN","書名"
"978-4-7741-6366-6","GitHub実践入門"
"978-4-7741-5377-3","JUnit実践入門"
"978-4-7973-8014-9","Java最強リファレンス"
"978-4-7973-4778-4","アジャイルソフトウェア開発の奥義"
"978-4-87311-704-1","Javaによる関数型プログラミング" - 「貸出状況を確認しました」のメールが送信されるので、メールに記述されている URL にアクセスします。
- 貸出申請画面が表示されます。3冊程「申請する」を選択して申請します。
- ログアウトします。
- 「貸出申請がありました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、tanaka.taro@sample.com / taro でログインします。
- 貸出承認画面が表示されます。「承認」あるいは「却下」を選択して確定させます。
- ログアウトします。
- 「貸出申請が承認・却下されました」のメールが送信されるので、メールに記述されている URL にアクセスします。ログイン画面が表示されるので、suzuki.hanako@test.co.jp / hanako でログインします。
- 貸出申請結果確認画面が表示されるので内容を確認します。
動作確認は特に問題ありませんでした。
サービス画面で「ksbysample-webapp-lending」サービスを停止します。
サービスから削除する
サービスを削除します。管理者モードで起動しているコマンドプロンプトから以下のコマンドを実行します。
> nssm.exe remove ksbysample-webapp-lending
「Remove the service?」のダイアログが表示されますので、「はい」ボタンをクリックします。サービスが削除されると「Service "ksbysample-webapp-lending" removed successfully!」のダイアログが表示されますので「OK」ボタンをクリックします。
次回は。。。
感想を書いて完了させる予定です。
履歴
2019/01/24
初版発行。
Spring Boot 1.5.x の Web アプリを 2.0.x へバージョンアップする ( 番外編 )( docker logs メモ書き )
概要
記事一覧はこちらです。
docker logs
で出力されるログはソケットかパイプでコンテナの標準出力・標準エラー出力に出力されたものを受け取って表示していると何となく思っていたのですが、docker logs で表示されるログの保存場所とローテート方法 の記事を読むとどうもログファイルに出力していて、それを読み取って表示しているらしいです。興味が湧いたので確認してみます。
参照したサイト・書籍
docker logs で表示されるログの保存場所とローテート方法
https://qiita.com/tily/items/adb433505da6c7812725Docker for WindowsのMobyLinuxVMに接続する方法
https://qiita.com/gentaro/items/cf666259cb6baf2eb8dbConfigure logging drivers
https://docs.docker.com/config/containers/logging/configure/
目次
docker logs
コマンドで出力されるログがログファイルに出力されていることを確認する- log-driver に awslogs を指定すればコンテナのログを Amazon CloudWatch Logs に転送できるらしい
手順
docker logs
コマンドで出力されるログがログファイルに出力されていることを確認する
pgadmin4 はログインしているとコンテナのログが出力され続けるので、これでログファイルのサイズが増え続けるのか確認してみます。
docker-compose up -d
コマンドでコンテナを起動した後、docker inspect --format '{{ .LogPath }}' pgadmin4
でログファイルのパスを確認します。
Hyper-V 上に作成されている MobyLinuxVM に接続してログファイルを確認します。適当なディレクトリに Dockerfile を新規作成し、以下の内容を記述します。
FROM alpine MAINTAINER You <you@example.com> RUN apk update && \ apk add util-linux && \ rm -rf /var/cache/apk/* ENTRYPOINT ["nsenter", "--target", "1", "--mount", "--uts", "--ipc", "--net", "--pid"]
build した後、コンテナを起動して MobyLinuxVM に接続します。
> docker build . -t hostenter > docker run -it --privileged --pid=host hostenter /bin/sh
接続後、docker inspect --format '{{ .LogPath }}' pgadmin4
コマンドで取得したディレクトリへ移動し、ログファイルのサイズが増え続けていることを確認します。
確かにログファイルが作成されていて、サイズが増え続けていました。ログが出力され続けるコンテナを長時間起動したままにする時は、ログファイルの最大サイズを設定した方が良さそうです。
log-driver に awslogs を指定すればコンテナのログを Amazon CloudWatch Logs に転送できるらしい
Configure logging drivers や Amazon CloudWatch Logs logging driver を見た感じでは、Docker 自体にログ転送の機能が用意されていて、log-driver に awslogs を指定して設定するだけで Amazon CloudWatch Logs に転送できるようです。
試してみたいところですが、今回はメモ書きに留めておきます。2.0.x へのバージョンアップの記事はそろそろ終わらせて 2.1.x の記事に移りたいので。
ここまで docker network、docker volume、docker logs を見ましたが、他にもまだ何かあるのでしょうか。。。
履歴
2019/01/22
初版発行。