かんがるーさんの日記

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

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その13 )( Spring Boot を 2.5.4 → 2.5.5 へ、Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その12 )( build.gradle から --add-opens=.....=ALL-UNNAMED の記述を削除する ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Java 17 に対応した Spring Boot 2.5.5. と、Eclipse Adoptium OpenJDK(Eclipse Temurin)の 17 がリリースされたので、バージョンアップします。

参照したサイト・書籍

目次

  1. Spring Boot を 2.5.4 → 2.5.5 へバージョンアップする
  2. Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする
  3. build タスク時に pmdMain タスクと test タスクで出力された警告を確認する
    1. WARNING: System::setSecurityManager will be removed in a future release
    2. OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

手順

Spring Boot を 2.5.4 → 2.5.5 へバージョンアップする

build.gradle の以下の点を変更します。

buildscript {
    ext {
        group "ksbysample"
        version "2.5.5"
    }
    repositories {
        mavenCentral()
        maven { url "https://repo.spring.io/release/" }
        gradlePluginPortal()
    }
    dependencies {
        // for doma-codegen-plugin
        classpath "org.postgresql:postgresql:42.2.24"
    }
}

plugins {
    id "java"
    id "eclipse"
    id "idea"
    id "org.springframework.boot" version "2.5.5"
    id "io.spring.dependency-management" version "1.0.11.RELEASE"
    id "groovy"
    id "checkstyle"
    id "com.github.spotbugs" version "4.7.3"
    id "pmd"
    id "net.ltgt.errorprone" version "2.0.2"
    id "com.gorylenko.gradle-git-properties" version "2.3.1"
    id "org.seasar.doma.codegen" version "1.4.1"
}

..........

dependencyManagement {
    imports {
        // bomProperty に指定可能な property は以下の URL の BOM に記述がある
        // https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/2.5.4/spring-boot-dependencies-2.5.4.pom
        mavenBom(org.springframework.boot.gradle.plugin.SpringBootPlugin.BOM_COORDINATES) {
            // Spring Boot の BOM に定義されているバージョンから変更する場合には、ここに以下のように記述する
            // bomProperty "thymeleaf.version", "3.0.9.RELEASE"
        }
        mavenBom("org.junit:junit-bom:5.8.1")
    }
}

dependencies {
    def spockVersion = "2.0-groovy-3.0"
    def jdbcDriver = "org.postgresql:postgresql:42.2.24"
    def domaVersion = "2.49.0"
    def lombokVersion = "1.18.20"
    def errorproneVersion = "2.9.0"

    ..........

Spring Boot 2.5.5 へのバージョンアップとして以下の点を変更します。

  • buildscript block の以下の点を変更します。
    • version "2.5.4"version "2.5.5"
  • plugins block の以下の点を変更します。
    • id "org.springframework.boot" version "2.5.4"id "org.springframework.boot" version "2.5.5"

各種ライブラリのバージョンアップとして以下の点を変更します。

  • buildscript block の以下の点を変更します。
    • classpath "org.postgresql:postgresql:42.2.23"classpath "org.postgresql:postgresql:42.2.24"
  • dependencyManagement block の以下の点を変更します。
    • mavenBom("org.junit:junit-bom:5.7.2")mavenBom("org.junit:junit-bom:5.8.1")
  • dependencies block の以下の点を変更します。
    • def jdbcDriver = "org.postgresql:postgresql:42.2.23"def jdbcDriver = "org.postgresql:postgresql:42.2.24"
    • def domaVersion = "2.47.1"def domaVersion = "2.49.0"

Gradle Tool Window の左上にある「Reload All Gradle Projects」ボタンをクリックして更新します。

clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると "BUILD SUCCESSFUL" のメッセージが出力されました。

f:id:ksby:20210926132712p:plain

Eclipse Adoptium OpenJDK(Eclipse Temurin) を 11.0.12+7 → 17+35 へバージョンアップする

  1. IntelliJ IDEA を終了させます。

  2. https://adoptium.net/index.html から OpenJDK17-jdk_x64_windows_hotspot_17_35.msi をダウンロードします。

    f:id:ksby:20210926133106p:plain

  3. インストール時に削除されるかもしれないので D:\Java\jdk-11.0.12.7-hotspot → D:\Java\jdk-11.0.12.7-hotspotx にリネームします。

  4. インストーラーを実行して D:\java\jdk-17.0.0.35-hotspot へインストールした後、環境変数 JAVA_HOME のパスを D:\java\jdk-17.0.0.35-hotspot へ変更します。

    f:id:ksby:20210926133806p:plain

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

    f:id:ksby:20210926134034p:plain

  5. D:\Java\jdk-11.0.12.7-hotspotx → D:\Java\jdk-11.0.12.7-hotspot に戻します。

  6. IntelliJ IDEA を起動します。

  7. 「Welcome to IntelliJ IDEA」ダイアログで ksbysample-webapp-lending プロジェクトを開いて、プロジェクトが使用する JDK を 11.0.12+7 に変更します。

  8. IntelliJ IDEA のメイン画面が開いたら、メニューから「File」-「Project Structure...」を選択します。

  9. 「Project Structure」ダイアログが表示されます。「Project SDK」で D:\Java\jdk-17.0.0.35-hotspot を選択します(なぜか2行表示されています)。

    f:id:ksby:20210926134643p:plain

  10. 「Experimental Feature Alert」のダイアログが表示されるので「Accept」ボタンをクリックします。

    f:id:ksby:20210926134821p:plain

  11. 「Project SDK」の「Edit」ボタンをクリックします。

    f:id:ksby:20210926134956p:plain

  12. 「Project Structure」ダイアログが表示されます。画面左側で「Platform Settings」-「SDKs」を選択して、中央のリストから「11.0.12.7」を選択した後、リストの上の「-」ボタンをクリックして削除します。

    f:id:ksby:20210926135118p:plain

  13. 中央のリストから「17」を選択した後、"17" → "17+35" へ変更します。

    f:id:ksby:20210926135259p:plain

  14. 「OK」ボタンをクリックして「Project Structure for New Projects」ダイアログを閉じます。

  15. メイン画面に戻ると画面右下に「Indexing...」の表示が出るので、終了するまで待ちます。

  16. build.gradle の sourceCompatibility、targetCompatibility の設定を JavaVersion.VERSION_17 に変更します。

    • sourceCompatibility = JavaVersion.VERSION_11sourceCompatibility = JavaVersion.VERSION_17
    • targetCompatibility = JavaVersion.VERSION_11targetCompatibility = JavaVersion.VERSION_17
  17. Gradle Tool Window の左上にある「Refresh all Gradle projects」ボタンをクリックして更新します。

  18. clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると "BUILD SUCCESSFUL" のメッセージが出力されますが、pmdMain タスクと test タスクで警告が出力されました。

    f:id:ksby:20210926140206p:plain

    pmdMain タスクで出力された警告は以下のものでした。

    • WARNING: A terminally deprecated method in java.lang.System has been called
    • WARNING: System::setSecurityManager has been called by edu.umd.cs.findbugs.ba.jsr305.TypeQualifierValue (file:/C:/Users/root/.gradle/caches/modules-2/files-2.1/com.github.spotbugs/spotbugs/4.4.0/83d0d8856de551bb4aa2f4b815a61b606c93acf/spotbugs-4.4.0.jar)
    • WARNING: Please consider reporting this to the maintainers of edu.umd.cs.findbugs.ba.jsr305.TypeQualifierValue
    • WARNING: System::setSecurityManager will be removed in a future release

    test タスクで出力された警告は以下のものでした。

    • OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

    調査は後回しにして先に進めます。

  19. Project Tool Window で src/test でコンテキストメニューを表示して「More Run/Debug」-「Run 'All Tests' with Coverage」を選択し、テストが全て成功することを確認します。

    f:id:ksby:20210926141718p:plain

build タスク時に pmdMain タスクと test タスクで出力された警告を確認する

WARNING: System::setSecurityManager will be removed in a future release

pmdMain タスクで出力された警告ですが、将来 Security Manager を廃止するために非推奨になっているためでした(https://openjdk.java.net/jeps/411 参照)。 ログを見ると spotbugs-4.4.0.jar で System::setSecurityManager が呼び出されているので PMD ではなく SpotBugs が原因でした。

SpotBugs は 4.4.1 がリリースされていたのでバージョンアップしてみましたが、警告が出力される状況は解消されなかったので、現時点では 4.4 のままとし SpotBugs の対応を待つことにします。

OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

以下の URL にこの警告に関する記述があり、

test タスク実行時の jvmArgs に -Xshare:off オプションを追加すれば警告が出力されないようにはできますが、気にするような警告ではないようなので、今は出力されたままにすることにします。

Java 17 は特にエラーも出ずに切り替えることができました。

ただし Lombok は現在使用している 1.18.20 ではまだ PLATFORM: JDK16 support added. 止まりで正式に Java 17 対応を表明してはいないので(https://projectlombok.org/changelog 参照)、Lombok を使うなら Java 17 の利用は Lombok の正式対応を待った方が良さそうです。

Gradle もまだ Java 17 には正式に対応していませんでした(https://github.com/gradle/gradle/issues/16857 参照)。7.3 で対応するそうです。

履歴

2021/09/26
初版発行。

IntelliJ IDEA を 2021.2.1 → 2021.2.2 へバージョンアップ

IntelliJ IDEA を 2021.2.1 → 2021.2.2 へバージョンアップする

IntelliJ IDEA の 2021.2.2 がリリースされているのでバージョンアップします。

※ksbysample-webapp-lending プロジェクトを開いた状態でバージョンアップしています。

  1. IntelliJ IDEA のメインメニューから「Help」-「Check for Updates...」を選択します。

  2. IntelliJ IDEA and Plugin Updates」ダイアログが表示されます。右下に「Update and Restart」ボタンが表示されていますので、「Update and Restart」ボタンをクリックします。

    f:id:ksby:20210926104303p:plain

  3. Plugin の update も表示されました。このまま「Update」ボタンをクリックします。

    f:id:ksby:20210926104344p:plain

  4. Patch がダウンロードされて IntelliJ IDEA が再起動します。

  5. IntelliJ IDEA が起動すると画面下部に「Indexing」のメッセージが表示されますので、終了するまで待機します。

  6. IntelliJ IDEA のメインメニューから「Help」-「About」を選択し、2021.2.2 へバージョンアップされていることを確認します。

  7. clean タスク実行 → Rebuild Project 実行 → build タスクを実行して、"BUILD SUCCESSFUL" のメッセージが出力されることを確認します。

    f:id:ksby:20210926111534p:plain

  8. Project Tool Window で src/test でコンテキストメニューを表示して「More Run/Debug」-「Run 'All Tests' with Coverage」を選択し、テストが全て成功することを確認します。

    f:id:ksby:20210926111944p:plain

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その12 )( build.gradle から --add-opens=.....=ALL-UNNAMED の記述を削除する )

概要

記事一覧はこちらです。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その11 )( Docker で複数の Tomcat を起動して動作確認する ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • build.gradle に不要になった -add-opens=.....=ALL-UNNAMED の記述が残っていたので削除します。

参照したサイト・書籍

目次

  1. build.gradle を変更する

手順

build.gradle を変更する

build.gradle を見直していたところ、以下の記述が残っていることに気づきました。今回のバージョンアップで groovy が 3系になって powermock も依存関係から削除しており、このオプションは不要になっているはずなので削除します。

// JDK 11 に変更後、test タスク実行時に groovy と powermock が JDKの内部部分にアクセスするためにコードでリフレクションを使用
// していて WARNING が出るため、JVM の起動時オプションの --add-opens を指定して WARNING が出ないようにする
def jvmArgsAddOpens = [
        "--add-opens=java.base/java.io=ALL-UNNAMED",
        "--add-opens=java.base/java.lang=ALL-UNNAMED",
        "--add-opens=java.base/java.lang.invoke=ALL-UNNAMED",
        "--add-opens=java.base/java.lang.ref=ALL-UNNAMED",
        "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED",
        "--add-opens=java.base/java.net=ALL-UNNAMED",
        "--add-opens=java.base/java.security=ALL-UNNAMED",
        "--add-opens=java.base/java.util=ALL-UNNAMED"
]

build.gradle の以下の点を変更します。

test {
    jvmArgs = jvmArgsForTask +
            ["-Dspring.profiles.active=unittest"]

    // for JUnit 5
    useJUnitPlatform()

    testLogging {
        afterSuite printTestCount
    }
}
  • def jvmArgsAddOpens = [ "--add-opens=java.base/java.io=ALL-UNNAMED", ... ] の記述を削除します。
  • test タスクの jvmArgs の記述から jvmArgsAddOpens + を削除します。

clean タスク実行 → Rebuild Project 実行 → build タスクを実行すると "BUILD SUCCESSFUL" のメッセージが出力されました。

f:id:ksby:20210926094902p:plain

履歴

2021/09/26
初版発行。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( 感想 )

記事一覧はこちらです。

  • Spring Boot 2.5 Release Notes には結構記述がありますが、アプリに直接影響が出る変更がなく今回もバージョンアップするだけで終わりました。

  • Gradle 7.x、Spock 2.x、Groovy 3.x へのバージョンアップは少し時間がかかるかもしれないと思っていましたが、ほとんど問題は発生しませんでした。

  • 今回のバージョンアップには関係ありませんが、今年の 9/1~9/3 に開催された Spring One で 2022年4Q にリリース予定の Spring Framework 6 + Spring Boot 3 から Jakarta EE 9 がベースラインになるとのアナウンスがありました(javax.*jakarta.* パッケージへ切り替えるのも Spring Boot 3 からになる模様)。IntelliJ IDEA は 2021年7月にリリースされた 2021.2 で javax.*jakarta.* パッケージへの移行を支援する「Automatic migration from Java EE to Jakarta EE」の機能がリリースされました。

    f:id:ksby:20210912105910p:plain:w450 f:id:ksby:20210912105948p:plain:w450

    「Run」ボタンをクリックすると javax.* パッケージが使用されている箇所を洗い出してくれます。

    f:id:ksby:20210912110616p:plain

    Spring Boot 3 にバージョンアップする時にこの機能を使うと思いますが、1年以上前にリリースされた機能を覚えていられるのかな。。。

    javax.*jakarta.* パッケージへの切替については Support for Jakarta EE 9 (annotations and interfaces in jakarta.* namespace) で議論されていますので、しばらくの間は要チェックでしょう。

    また、Unable to upgrade to latest Tomcat - Spring framework and RestEasy don't support Tomcat 10http://tomcat.apache.org/migration-10.html を見ると Tomcat 10 にバージョンアップするには jakarta.* パッケージへの変更が必須のようです。Embedded Tomcat ならば Spring Boot 3 になるまでは Tomcat 10 は使用されず問題にならないかもしれませんが、Tomcat 10 のサーバを別途構築して war ファイルを作成して deploy しなければならない場合には Spring Boot 3 になるまで deploy できないことに気づかないかもしれません。後者の環境で deploy したことがないので本当にそうなのかは分かりませんが、jakarta.* パッケージの利用有無は1年くらいは要注意でしょう。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その11 )( Docker で複数の Tomcat を起動して動作確認する )

概要

記事一覧はこちらです。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その10 )( Docker コンテナの image をバージョンアップする ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Build OCI images with Cloud Native Buildpacks の機能で作成した Docker image で Web アプリを実行して動作確認します。

参照したサイト・書籍

目次

  1. clean タスク実行 → Rebuild Project 実行 → build タスクを実行する
  2. bootBuildImage タスクを実行する
  3. docker-compose.app.yml を変更する
  4. Docker で複数の Tomcat を起動して動作確認する
  5. Docker Compose V2 では --compatibility オプションが無くなったのか。。。と思ったが、docker-compose -f docker-compose.app.yml up -d で app コンテナが3つ起動する

手順

clean タスク実行 → Rebuild Project 実行 → build タスクを実行する

clean タスク実行 → Rebuild Project 実行 → build タスクを実行して BUILD SUCCESSFUL のメッセージが出力されることを確認します。

f:id:ksby:20210911183803p:plain

bootBuildImage タスクを実行する

bootBuildImage タスクを実行して Successfully built image 'docker.io/library/ksbysample-webapp-lending:2.5.4'BUILD SUCCESSFUL のメッセージが出力されることを確認します。

f:id:ksby:20210911184350p:plain

docker-compose.app.yml を変更する

docker-compose.app.yml を以下のように変更します。

  app:
    image: ksbysample-webapp-lending:2.5.4
    environment:
      - JAVA_TOOL_OPTIONS=-Dspring.profiles.active=product -Dlogging.appender=CONSOLE
      - SPRING_DATASOURCE_HIKARI_JDBC_URL=jdbc:postgresql://postgresql/ksbylending
      - SPRING_MAIL_HOST=mail-server
      - SPRING_RABBITMQ_HOST=haproxy
    deploy:
      mode: replicated
      replicas: 3
    # entrypoint: /bin/bash
    # stdin_open: true
    # tty: true
  • image: ksbysample-webapp-lending:2.4.3image: ksbysample-webapp-lending:2.5.4 に変更します。

Docker で複数の Tomcat を起動して動作確認する

docker-compose -f docker-compose.mail.yml up -ddocker-compose -f docker-compose.app.yml --compatibility up -d コマンドを実行します。Docker の「Experimental Features」の「Use Docker Compose V2 release candidate」を有効にしていたのですが、V2 では --compatibility オプションが無くなっているようです。「Use Docker Compose V2 release candidate」を無効にすることにします。

f:id:ksby:20210911185058p:plain

http://localhost:8080/haproxy?stats にアクセスして全てのインスタンスが緑色になるまで待ちます。

f:id:ksby:20210911190055p:plain

以下の手順で動作確認します ( 画面キャプチャは省略します )。

  • ブラウザを起動して 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 でログインします。
  • 貸出申請結果確認画面が表示されるので内容を確認します。

動作確認は特に問題ありませんでした。

docker-compose -f docker-compose.app.yml --compatibility downdocker-compose -f docker-compose.mail.yml downdocker-compose down コマンドを実行してコンテナを停止します。

Docker Compose V2 では --compatibility オプションが無くなったのか。。。と思ったが、docker-compose -f docker-compose.app.yml up -d で app コンテナが3つ起動する

Docker Compose V2 では --compatibility オプションが無くなって残念。。。と思ったのですが、試しに --compatibility オプションを削除して docker-compose -f docker-compose.app.yml up -d コマンドを実行してみたところ app コンテナが3つ起動しました。--compatibility オプションなして同じコンテナの複数起動がサポートされるようになったようです。

f:id:ksby:20210912062225p:plain f:id:ksby:20210912062354p:plain

履歴

2021/09/12
初版発行。

AdoptOpenJDK 11.0.11+9 を Eclipse Adoptium OpenJDK 11.0.12+7 へ、IntelliJ IDEA を 2021.1.3 → 2021.2.1 へ、Git for Windows を 2.32.0.2 → 2.33.0.2 へバージョンアップ

AdoptOpenJDK 11.0.11+9 を Eclipse Adoptium OpenJDK 11.0.12+7 へバージョンアップする

※ksbysample-webapp-lending プロジェクトを開いた状態でバージョンアップしています。

AdoptOpenJDK は Eclipse Adoptium へ 2021年8月に移行されましたので、Eclipse Adoptium OpenJDK 11.0.12+7 へバージョンアップします。

  1. https://adoptium.net/index.html から OpenJDK11U-jdk_x64_windows_hotspot_11.0.12_7.msi をダウンロードします。

    f:id:ksby:20210911073704p:plain

  2. インストール時に削除されるかもしれないので D:\Java\jdk-11.0.11.9-hotspot → D:\Java\jdk-11.0.11.9-hotspotx にリネームします。

  3. インストーラーを実行して D:\Java\jdk-11.0.12.7-hotspot へインストールした後、環境変数 JAVA_HOME のパスを D:\Java\jdk-11.0.12.7-hotspot へ変更します。

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

    f:id:ksby:20210911074603p:plain

  4. D:\Java\jdk-11.0.11.9-hotspotx → D:\Java\jdk-11.0.11.9-hotspot に戻します。

  5. IntelliJ IDEA を再起動します。

  6. 「Welcome to IntelliJ IDEA」ダイアログで ksbysample-webapp-lending プロジェクトを開いて、プロジェクトが使用する JDK を 11.0.12+7 に変更します。

  7. IntelliJ IDEA のメイン画面が開いたら、メニューから「File」-「Project Structure...」を選択します。

  8. 「Project Structure」ダイアログが表示されます。「Project SDK」で D:\Java\jdk-11.0.12.7-hotspot を選択します。

    f:id:ksby:20210911075200p:plain

  9. 「Project SDK」の「Edit」ボタンをクリックします。

    f:id:ksby:20210911075412p:plain

  10. 「Project Structure」ダイアログが表示されます。画面左側で「Platform Settings」-「SDKs」を選択して、中央のリストから「11.0.11.9」を選択した後、リストの上の「-」ボタンをクリックして削除します。

    f:id:ksby:20210911075600p:plain

  11. 中央のリストから「11」を選択した後、"11" → "11.0.12+7" へ変更します。

    f:id:ksby:20210911075741p:plain

  12. 「OK」ボタンをクリックして「Project Structure for New Projects」ダイアログを閉じます。

  13. メイン画面に戻ると画面右下に「Indexing...」の表示が出るので、終了するまで待ちます。

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

  15. clean タスク実行 → Rebuild Project 実行 → build タスクを実行して、"BUILD SUCCESSFUL" のメッセージが出力されることを確認します。

    f:id:ksby:20210911093258p:plain

  16. Project Tool Window で src/test でコンテキストメニューを表示して「More Run/Debug」-「Run 'All Tests' with Coverage」を選択し、テストが全て成功することを確認します。

    f:id:ksby:20210911094343p:plain

  17. 特に問題は発生しませんでした。Eclipse Adoptium OpenJDK 11.0.12+7 で開発を進めます。

IntelliJ IDEA を 2021.1.3 → 2021.2.1 へバージョンアップする

IntelliJ IDEA の 2021.2.1 がリリースされているのでバージョンアップします。

※ksbysample-webapp-lending プロジェクトを開いた状態でバージョンアップしています。

  1. IntelliJ IDEA のメインメニューから「Help」-「Check for Updates...」を選択します。

  2. IntelliJ IDEA and Plugin Updates」ダイアログが表示されます。右下に「Update and Restart」ボタンが表示されていますので、「Update and Restart」ボタンをクリックします。

    f:id:ksby:20210911095745p:plain

  3. Plugin の update も表示されました。このまま「Update」ボタンをクリックします。

    f:id:ksby:20210911095905p:plain

  4. Patch がダウンロードされて IntelliJ IDEA が再起動します。

  5. IntelliJ IDEA が起動すると画面下部に「Indexing」のメッセージが表示されますので、終了するまで待機します。

  6. IntelliJ IDEA のメインメニューから「Help」-「About」を選択し、2021.2.1 へバージョンアップされていることを確認します。

  7. clean タスク実行 → Rebuild Project 実行 → build タスクを実行して、"BUILD SUCCESSFUL" のメッセージが出力されることを確認します。

    f:id:ksby:20210911102804p:plain

  8. Project Tool Window で src/test でコンテキストメニューを表示して「More Run/Debug」-「Run 'All Tests' with Coverage」を選択し、テストが全て成功することを確認します。

    f:id:ksby:20210911103148p:plain

  9. 最後にメジャーバージョンアップなので以前のバージョンの C:\Users\root\AppData\Local\JetBrains\IntelliJIdea2021.1 を削除します。

Git for Windows を 2.32.0.2 → 2.33.0.2 へバージョンアップする

Git for Windows の 2.33.0.2 がリリースされていたのでバージョンアップします。

  1. https://gitforwindows.org/ の「Download」ボタンをクリックして Git-2.33.0.2-64-bit.exe をダウンロードします。

  2. Git-2.33.0.2-64-bit.exe を実行します。

  3. 「Git 2.33.0.2 Setup」ダイアログが表示されます。インストーラーの画面を一通り見たいので「Only show new options」のチェックを外してから [Next >] ボタンをクリックします。

  4. 「Select Components」画面が表示されます。「Git LFS(Large File Support)」だけチェックした状態で [Next >]ボタンをクリックします。

  5. 「Choosing the default editor used by Git」画面が表示されます。「Use Vim (the ubiquitous text editor) as Git's default editor」が選択された状態で [Next >]ボタンをクリックします。

  6. 「Adjusting the name of the initial branch in new repositories」画面が表示されます。「Let Git decide」が選択されていることを確認後、[Next >]ボタンをクリックします。

  7. 「Adjusting your PATH environment」画面が表示されます。中央の「Git from the command line and also from 3rd-party software」が選択されていることを確認後、[Next >]ボタンをクリックします。

  8. 「Choosing the SSH executable」画面が表示されます。「Use bundled OpenSSL」が選択されていることを確認後、[Next >]ボタンをクリックします。

  9. 「Choosing HTTPS transport backend」画面が表示されます。「Use the OpenSSL library」が選択されていることを確認後、[Next >]ボタンをクリックします。

  10. 「Configuring the line ending conversions」画面が表示されます。一番上の「Checkout Windows-style, commit Unix-style line endings」が選択されていることを確認した後、[Next >]ボタンをクリックします。

  11. 「Configuring the terminal emulator to use with Git Bash」画面が表示されます。「Use Windows'default console window」が選択されていることを確認した後、[Next >]ボタンをクリックします。

  12. 「Choose the default behavior of git pull」画面が表示されます。「Default (fast-forward or merge)」が選択されていることを確認した後、[Next >]ボタンをクリックします。

  13. 「Choose a credential helper」画面が表示されます。「None」が選択されていることを確認した後、[Next >]ボタンをクリックします。

  14. 「Configuring extra options」画面が表示されます。「Enable file system caching」だけがチェックされていることを確認した後、[Next >]ボタンをクリックします。

  15. 「Configuring experimental options」画面が表示されます。何もチェックせずに [Install]ボタンをクリックします。

  16. インストールが完了すると「Completing the Git Setup Wizard」のメッセージが表示された画面が表示されます。中央の「View Release Notes」のチェックを外した後、[Next >]ボタンをクリックしてインストーラーを終了します。

  17. コマンドプロンプトを起動して git --version を実行し、git のバージョンが git version 2.33.0.windows.2 になっていることを確認します。

    f:id:ksby:20210911105420p:plain

  18. 特に問題はないようですので、2.33.0.2 で作業を進めたいと思います。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その10 )( Docker コンテナの image をバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その9 )( SpotBugs を 4.2.1 → 4.4.0 へバージョンアップする ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Docker コンテナの image をバージョンアップします。

参照したサイト・書籍

  1. postgres / pgadmin4
    https://github.com/postgres/pgadmin4

    • Dockerfile はトップ直下に、entrypoint.sh は /pkg/docker の下にあります。
  2. pgAdmin - The config.py File
    https://www.pgadmin.org/docs/pgadmin4/development/config_py.html

目次

  1. docker-compose.yml を変更する
  2. .env を変更する
  3. docker-compose up -d コマンドを実行する
  4. 動作確認
  5. pgAdmin 4 のコンテナが起動しない問題を解消する

手順

docker-compose.yml を変更する

services:
  prometheus:
    image: prom/prometheus:v2.29.2
    ..........

  grafana:
    image: grafana/grafana:8.1.3
    ..........

  redis_exporter:
    image: oliver006/redis_exporter:v1.27.0-alpine
    ..........
  • prometheus で image: prom/prometheus:v2.25.0image: prom/prometheus:v2.29.2 に変更します。
  • grafana で image: grafana/grafana:7.4.3image: grafana/grafana:8.1.3 に変更します。
  • redis_exporter で image: oliver006/redis_exporter:v1.17.1-alpineimage: oliver006/redis_exporter:v1.27.0-alpine に変更します。

.env を変更する

HOST_IP_ADDRESS=192.168.3.4
REDIS_VERSION=6.2.5
REDIS_CLUSTER_1_PORT=6379
REDIS_CLUSTER_2_PORT=6380
REDIS_CLUSTER_3_PORT=6381
REDIS_CLUSTER_4_PORT=6382
REDIS_CLUSTER_5_PORT=6383
REDIS_CLUSTER_6_PORT=6384

RABBITMQ_VERSION=3.9.5-management
RABBITMQ_ERLANG_COOKIE=Uzkm93w5e1Lz8AcP
RABBITMQ_DEFAULT_USER=rabbitmq
RABBITMQ_DEFAULT_PASS=12345678
RABBITMQ_DEFAULT_VHOST=/

HAPROXY_VERSION=2.4.4

POSTGRESQL_VERSION=13.4
PGADMIN4_VERSION=5.6

FLYWAY_VERSION=7.15.0
FLYWAY_URL=jdbc:postgresql://postgresql/ksbylending
FLYWAY_USER=ksbylending_user
FLYWAY_PASSWORD=xxxxxxxx

POSTGRES_EXPORTER_USER=postgres_exporter
POSTGRES_EXPORTER_PASSWORD=zzzzzzzz

MAILSERVER_VERSION=release-v7.2.0
  • 以下の点を変更します。
    • REDIS_VERSION=6.2.1REDIS_VERSION=6.2.5
    • RABBITMQ_VERSION=3.8.14-managementRABBITMQ_VERSION=3.9.5-management
    • HAPROXY_VERSION=2.3.6HAPROXY_VERSION=2.4.4
    • POSTGRESQL_VERSION=12.6POSTGRESQL_VERSION=13.4
    • PGADMIN4_VERSION=5.0PGADMIN4_VERSION=5.6
    • FLYWAY_VERSION=7.5.4FLYWAY_VERSION=7.15.0

docker-compose up -d コマンドを実行する

以下のコマンドを実行して docker image を更新・ダウンロードします(画面キャプチャはなし)。

  1. docker-compose build --no-cache コマンドを実行し、Dockerfile で作成している image を更新します。
  2. docker-compose up -d コマンドを実行してコンテナ一式(メールサーバ・rainloop を除く)を起動します。

動作確認

http://localhost:1936/haproxy?stats にアクセスして RabbitMQ が起動することを確認します。

f:id:ksby:20210909062721p:plain

http://localhost:15672/ にアクセスして rabbitmq / 12345678 でログインし、rabbitmq1~3 が正常に動作していることを確認します。

f:id:ksby:20210909062919p:plain

clean タスク実行 → Rebuild Project 実行 → build タスクを実行して BUILD SUCCESSFUL のメッセージが出力されることを確認します。

f:id:ksby:20210909063646p:plain

http://localhost:9090/graph にアクセスして Prometheus の画面が表示されることを確認します。

f:id:ksby:20210909063906p:plain

http://localhost:3000/ にアクセスして admin / admin でログインし、画面が表示されることを確認します。

f:id:ksby:20210909064112p:plain

http://localhost:12000/ にアクセスして postgres@example.com / yyyyyyyy でログインし、画面が表示されることを確認します。。。が画面が表示されませんでした。

f:id:ksby:20210909064354p:plain

Docker のログを見ると /var/lib/pgadmin/sessions に書き込み権限がないという警告ログが出力されてコンテナが終了していました。原因の調査は後で行います。

f:id:ksby:20210909064547p:plain

WARNING: Failed to set ACL on the directory containing the configuration database:
           [Errno 1] Operation not permitted: '/var/lib/pgadmin'
HINT   : You may need to manually set the permissions on
         /var/lib/pgadmin to allow pgadmin to write to it.

IntelliJ IDEA の Service から redis-cluster-6379 コンテナに Create Terminal で接続して、redis-clicluster nodes コマンドを実行してクラスタ構成になっていることを確認します。

f:id:ksby:20210909064906p:plain

pgAdmin 4 のコンテナが起動しない問題を解消する

調べてみたところ、

  • ローカルの ./docker/pgadmin4/data を Docker コンテナの /var/lib/pgadmin にマウントしているが、マウントしているディレクトリの permission は変更できず、/var/lib/pgadmin/sessions の権限チェックに引っかかっているためエラーとなり起動しない。
  • https://www.pgadmin.org/docs/pgadmin4/development/config_py.html を見ると SESSION_DB_PATH という設定項目が存在し、デフォルトは SESSION_DB_PATH = os.path.join(DATA_DIR, 'sessions') だが別のパスに変更することができる模様。
  • docker-compose.yml で PGADMIN_CONFIG_+設定項目名で設定ができる。

という結果でしたので、sessions 用のディレクトリを /var/lib/pgadmin/sessions 以外の場所に作成し、適切な権限を付与して、かつ GADMIN_CONFIG_SESSION_DB_PATH を設定することで回避することにします。

docker/pgadmin4 の下に Dockerfile を新規作成し、以下の内容を記述します。

ARG PGADMIN4_VERSION
FROM dpage/pgadmin4:${PGADMIN4_VERSION}

USER root
RUN mkdir /var/lib/pgadmin_session
RUN chown pgadmin:pgadmin /var/lib/pgadmin_session
RUN chmod 0700 /var/lib/pgadmin_session

docker-compose.yml の pgadmin4 の記述を以下のように変更します。

  pgadmin4:
    build:
      context: ./docker/pgadmin4
      args:
        - PGADMIN4_VERSION=${PGADMIN4_VERSION}
    image: dpage/pgadmin4:${PGADMIN4_VERSION}-custom
    container_name: pgadmin4
    ports:
      - "12000:80"
    environment:
      # TZ=Asia/Tokyo を設定してみたが日本時間に変わらなかったのでコメントアウトしておく
      # - TZ=Asia/Tokyo
      # PGADMIN_DEFAULT_EMAIL には接続する PostgreSQL の ユーザ名を設定する(サーバを追加する時楽なため)
      - PGADMIN_DEFAULT_EMAIL=postgres@example.com
      - PGADMIN_DEFAULT_PASSWORD=yyyyyyyy
      # PGADMIN_CONFIG_CONSOLE_LOG_LEVEL は debug 用
      # 設定値は https://www.pgadmin.org/docs/pgadmin4/development/config_py.html の CONSOLE_LOG_LEVEL 参照
      - PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10
      - PGADMIN_CONFIG_SESSION_DB_PATH='/var/lib/pgadmin_session'
    volumes:
      - ./docker/pgadmin4/data:/var/lib/pgadmin
  • build の記述を追加します。
  • image: dpage/pgadmin4:${PGADMIN4_VERSION}image: dpage/pgadmin4:${PGADMIN4_VERSION}-custom に変更します。
  • environment に - PGADMIN_CONFIG_SESSION_DB_PATH='/var/lib/pgadmin_session' を追加します。

docker-compose build --no-cache コマンドを実行した後、docker-compose downdocker-compose up -d コマンドを実行してコンテナを再起動します。

http://localhost:12000/ にアクセスすると無事ログイン画面が表示されて、

f:id:ksby:20210911002858p:plain

postgres@example.com / yyyyyyyy でログインすると、登録済の情報で PostgreSQL に接続することができることが確認できました。

f:id:ksby:20210911003056p:plain

最後にローカルに残っている更新前のバージョンの Docker イメージを削除します。

履歴

2021/09/11
初版発行。