If you can dream it, you can do it.

元タイトル「北の大地のIT技術屋より」

SpringMVCのFormの配列の上限値の初期値が256でIndexOutOfBoundsException落ちる件

 

先日SpringMVCで作ったWebアプリの性能試験を行っていた。その内容はデータを一覧形式で表示する業務システムにありがちな画面で、200件弱のデータを検索して再検索をするとIndexOutOfBoundsExceptionが発生してInternalServerErrorになってしまうというもので、下記の様なエラーが出る。

Invalid list index in property path 'dataList[256]'; nested exception is java.lang.IndexOutOfBoundsException: Index: 256, Size: 256

Formオブジェクトに表示するListをバインドしているのだが、その配列の上限値がデフォルトで256件になっており、それ以上を呼び出そうとすると落ちたようだった。

下記記事を参考にして対策をした。

追加したコードはこんな感じ。

@InitBinder
public void configureWebDataBinder(WebDataBinder binder){
    binder.setAutoGrowCollectionLimit(1024);
}

これをContollerに差し込んで解決。

 

元々は数年後のデータを想定してデータを増やし、明らかに動作が遅くなるかとか、落ちる等がないかを確認するテストだった。スロークエリやコストが高すぎるのことがないかを実行計画で確認したりする予定だったが、思わぬ障害を発見することになって結果オーライ。

小さいシステムでも色んな方面からテストしてみるのには価値があるんだなと思った。

 

今日はここまで。