2012-09-10 41 views
9

我只想知道彈簧批次中是否有「JOB」作用域,如「STEP」作用域? 如果沒有,我們是否應該開發我們的定製範圍,還是有更好的選擇?是否有春季批次「工作」範圍?

在此先感謝。

+0

你可以通過更多關於你想實現的細節來擴展你的問題嗎? –

+0

我已經創建了一個dataHolder bean來在作業的不同步驟之間共享數據。我的工作,可以由多個線程異步執行,所以爲了線程安全性的要求,我確實想爲每個執行的Job創建一個dataHolder bean。 –

回答

0

如果你的dataHolder bean持有狀態,你可以用適當的bean scope原型

+0

但是在原型範圍內,每當我從作業步驟引用dataHolder bean時,都會創建一個新的bean?我,我想從所有給定作業的步驟中使用相同的dataHolder bean。 –

+0

我仍然不確定您的用例,但可以使用http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html –

+0

完成簡單的線程安全共享狀態謝謝michael的幫助,爲了解決我的問題,我最終創建了一個dataHolderResolver Bean(Singleton),其中包含返回與給定jobId關聯的DataHolder的方法getDataHolder(int jobId)。我將dataHolder bean聲明爲原型,並且我使用dataHolderResolver bean上的lookup-method spring特性來獲取新的dataHolder引用(如果它尚未爲給定的jobId創建並緩存)。但是,我認爲在Spring批次的下一個版本中有'作業'範圍是有用的。 –

6

一個JIRA已經開通了一些時間前就對這個問題的春天批次問題追蹤: https://jira.springsource.org/browse/BATCH-1701

pull請求已經提交,以及,希望它會很快被合併,因爲我有這樣的使用情況下,也: https://github.com/SpringSource/spring-batch/pull/41

有在平均時間多的解決方法,各有其缺點, 看到計算器這樣的回答: https://stackoverflow.com/a/8121102/470107

+0

謝謝拉斐爾;) –

+0

我認爲第三個鏈接是正確的做法:你有一個「作業執行範圍」,如果你想讓每個線程與自己的數據隔離,它比「作業」範圍更好 –