1. ホーム
  2. Java

Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。

2022-02-21 19:55:24
<パス

背景

フロントエンドページのフォーム入力データが大きく、複数のテキスト、複数の画像を含み、最終的にデータが圧縮されないとアップロードに失敗します。

問題点1

バックエンドエラー報告。

IllegalStateException: マルチパートリクエストは、関連するコネクタに設定されたmaxPostSizeの制限を超えるパラメータデータ(アップロードされたファイルを含む)を含んでいました。

つまり、リクエストのデータ量が大きすぎて、最大しきい値を超えているのです。

  • 解決策

修正 Spring Boot 組み込みのTomcat maxPostsize の値は application.yml の設定ファイルに、以下を追加します。

server:  
  tomcat:
    max-http-post-size: -1


注意:以下の設定は、Tomcatのリクエストデータ制限を解決するものではありません。

spring:
  servlet:
    multipart:
      max-file-size: 30Mb
      max-request-size: 100Mb


問題点2

アプリケーションサーバーから要求されるデータが多すぎるという問題を解決した後、次のステップのDBへの書き込みで、データベースの最大許容パケット数のデフォルト値を超えてしまうという同様の問題が発生したのです。

原因:com.mysql.jdbc.PacketTooBigException.PacketTooBigExceptionが発生しました。クエリ用のパケットが大きすぎます (16800061 > 16777216)。サーバ側でmax_allowed_packet'変数を設定することで、この値を変更することができます。

  • 解決策

DBの修正 max_allowed_packet の値を指定します。

USE demo;
set global max_allowed_packet = 3*1024*1024*10; # change to 30M
show VARIABLES like '%max_allowed_packet%'; # Restart DB connection to take effect


注意事項 MySQL max_allowed_packet のデフォルトの構成は 16777216 = 16 * 1024 * 1024 であり、16M


ご不明な点、バグが見つかった場合は、お気軽にご連絡ください。

皆様のご意見・ご感想をお待ちしております。