ClassPathResource と FileSystemResource

Spring Batch のプログラムを実行すると、

org.springframework.batch.infrastructure.item.ItemStreamException:
Failed to initialize the reader

というエラーになる。reader の初期化失敗

AI様にお伺いを立てると、「指定したファイルが読めない」ということのようだ。

ネットで見つけたサンプルコードのファイル名だけ変えてみたのだが、それがいけなかった。やっぱちゃんと出てきたステートメントの意味を調べつつやらないといかんね(^^;

読み込むファイルは、'src/main/resources' といったクラスパス(プロジェクト内のパス)ではなく、その外に存在している。
具体的には、'C:\Users\lovelychan\Documents\testdata_20260623_091037.txt' である。

最初、FlatFileItemReaderBuilder の resource を

.resource(new ClassPathResource("C:\\Users\\lovelychan\\Documents\\testdata_20260623_091037.txt"))

という具合に、ClassPathResource として指定していたので、プログラムは

src/main/resources/C:/Users/lovelychan/Documents/testdata_20260623_091037.txt

というわけわからんパスを探しに行って、Failed to initialize the reader になっちゃうのよね。

.resource(new FileSystemResource("C:\\Users\\lovelychan\\Documents\\testdata_20260623_091037.txt"))

という具合に OS のファイルシステム(外部の特定のフォルダ)のパスとして指定することで正常に実行されるようになった。

ちなみにクラスパス(ClassPathResource)として指定するファイルは、JARファイルなどに同梱する静的ファイルのようだ。例えばメッセージ番号とメッセージの対応表とか、そんな感じのやつかな。
サンプルプログラムだと、sample.txt をクラスパスに置いてるケースが多いが、実際の業務用のバッチであれば、処理対象のファイルは絶対クラスパスの外にいるわけで、基本的には FileSystemResource の設定となるね。

トラックバック(0)

このブログ記事を参照しているブログ一覧: ClassPathResource と FileSystemResource

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/7218

コメントする

このブログ記事について

このページは、shinodaが2026年6月24日 21:04に書いたブログ記事です。

ひとつ前のブログ記事は「H2 コンソールは tomcat 経由で提供される」です。

次のブログ記事は「Spring Batch で固定長ファイルを読み込み DB 登録」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら