Spring BatchでItemReaderからジョブパラメータにアクセスする方法は?
2023-08-25 11:42:07
質問
これは私の
job.xml
:
<job id="foo" job-repository="job-repository">
<step id="bar">
<tasklet transaction-manager="transaction-manager">
<chunk commit-interval="1"
reader="foo-reader" writer="foo-writer"
/>
</tasklet>
</step>
</job>
これはアイテムリーダーです。
import org.springframework.batch.item.ItemReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("foo-reader")
public final class MyReader implements ItemReader<MyData> {
@Override
public MyData read() throws Exception {
//...
}
@Value("#{jobParameters['fileName']}")
public void setFileName(final String name) {
//...
}
}
これはSpring Batchが実行時に言っていることです。
Field or property 'jobParameters' cannot be found on object of
type 'org.springframework.beans.factory.config.BeanExpressionContext'
ここで何が問題なのでしょうか?Spring 3.0のこれらのメカニズムについて、どこでもっと読むことができますか?
どのように解決するのですか?
前述のとおり、リーダーには「ステップ」スコープが必要です。これを実現するには
@Scope("step")
アノテーションを使用します。以下のように、そのアノテーションをリーダーに追加すれば、うまくいくはずです。
import org.springframework.batch.item.ItemReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("foo-reader")
@Scope("step")
public final class MyReader implements ItemReader<MyData> {
@Override
public MyData read() throws Exception {
//...
}
@Value("#{jobParameters['fileName']}")
public void setFileName(final String name) {
//...
}
}
このスコープはデフォルトでは利用できません。
batch
XML 名前空間を使っている場合は利用できます。そうでない場合は、Spring の設定に以下を追加することで、このスコープを利用できるようになります。
Spring Batchのドキュメント
:
<bean class="org.springframework.batch.core.scope.StepScope" />
関連
-
Eclipse の問題 アクセス制限。タイプ 'jfxrt' はAPI解決されていません。
-
Uncaught ReferenceError: は定義されていません。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
SocketException java.netの4つの例外解決策。
-
XXX型を囲むインスタンスがJavaでアクセスできない
-
java send https request prompt java.security.cert.について。
-
Junitのユニットテストエラー
-
アクセス制限の解決方法: ---- in Java
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
XMLファイル操作時のjava.util.NoSuchElementExceptionを解決する方法。
-
Java の switch case 文で必要な定数式の問題の解決法
-
Git Pull Failed マージされていないファイルがあるため、Pull できません。
-
unsigned char* から const jbyte* {aka const signed char*} への変換が無効です。
-
FindBugの使用概要
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
Java基礎編 - オブジェクト指向
-
Server Tomcat v9.0 Server at localhost の起動に失敗しました。
-
Java基礎 - マッピングとQ/A
-
htmlとwordの相互変換の実装(画像あり)