アソビューAdvent Calendar 2022の22日目(裏面)の記事です。
こんにちは。
SLAM DUNKど真ん中世代の佐藤です。
題名とおりSpring BootアプリケーションでPOSTデータサイズの設定についての記事です。 Spring Bootのバージョンによって設定が異なるためちょこっとはまりました。 とくに旬な話題でもないので同じような状況になった方向けの記事となります。
クラウドが主流になる以前はJavaアプリケーションはWARやEARファイルをサーバーにデプロイしていましたが、Spring Bootではサーバーを組み込んだ状態いわゆるfat-JARをつくる機能があるため、外部依存のない必要なものすべてをまるっと含めたポータビリティの高いアプリケーションをつくることができます。
組み込みサーバーの設定の基本
このようなアプリケーションの場合、サーバーの設定は基本propertiesファイルに記述することになります。
たとえば以下のようにpropertiesファイルに書きます。
Spring Boot Version 3.0.0
server.tomcat.max-http-form-post-size=2MB
課題
今回私が設定しようとしたアプリケーションはSpring Bootのバージョン(1.3.3.RELEASE)が古く、propertiesファイルから設定ができませんでした。 以下の1.3.3.RELEASEのドキュメント、#EMBEDDED SERVER CONFIGURATIONの項に設定が見当たりませんでした。
対応方法
Spring Bootでは他にも組み込みサーバーの設定を変更する方法があります。EmbeddedServletContainerCustomizerを実装することで実現できます。 (※CustomizerはSpring Bootのバージョンによって実装が異なるようなのでSpring Bootのバージョンに注意が必要です。)
以下はEmbeddedServletContainerCustomizerを実装してPOSTデータサイズを10MBへ変更する例です。
@Configuration public class EmbeddedServletContainerConfig { @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return new MyCustomizer(); } private static class MyCustomizer implements EmbeddedServletContainerCustomizer { // POSTデータサイズを10MB int maxPostSize = 10 * 1024 * 1024; @Override public void customize(ConfigurableEmbeddedServletContainer factory) { if (factory instanceof TomcatEmbeddedServletContainerFactory) { customizeTomcat((TomcatEmbeddedServletContainerFactory) factory); } } public void customizeTomcat(TomcatEmbeddedServletContainerFactory factory) { factory.addConnectorCustomizers(new TomcatConnectorCustomizer() { @Override public void customize(Connector connector) { connector.setMaxPostSize(maxPostSize); } }); } } }
バージョンごとに設定が異なるので注意
ちなみにpropertiesファイルで設定ができるバージョンであっても設定の仕方が異なるのでSpring Bootの対象のバージョンを確認するようにしましょう。 私がドキュメントで確認した感じですと以下のように設定が変わっているようです。
1.5.0.RELEASE以降
server.tomcat.max-http-post-size
2.2.1.RELEASE以降〜CURRENT(3.0.0)
server.tomcat.max-http-form-post-size
同じようにはまった方へ届きますように!