2016-03-30 38 views
0

如何從作者中讀取由讀者(自定義讀者)創建的java對象?如何從spring批處理訪問bean集

我必須保留count of the records processedskipped由於異常和所有郵件通知後作業執行。我不想把它放在execution context因爲我不需要堅持它。

我可以直接從reader中設置一個bean,然後從作者設置autowire並使用它?

+0

爲什麼你不堅持在JobContext – Panther

+0

像只計數相關的信息有很多這樣的,我不想堅持的價值觀,但要通知發送到SNS只是工作需要之後。我的工作無法重新啓動。在數據庫重載之後,我已經清除了相關的元數據。 –

+0

我正在嘗試Java的ThreadLocal feture截至目前。這將幫助我在這裏:) –

回答

0

您可以簡單地使用與讀者,寫者相同的類,然後可以共享實例變量。事實上,在完成作業之後,通過在'@afterJob'方法中實現StepExecutionListener,您可以使用相同的對象來執行諸如發送郵件之類的內容。

如果您的讀者和作者擁有簡單的代碼,這是一個很好的方法。或者,您可以通過讓分隔符讀寫器類具有實際邏輯並將您的實例變量傳遞給這些類來將該代碼委託給其他類。 您只需要在您的配置中定義與讀取器,寫入器和偵聽器相同的類。

public class CommitWriter implements ItemWriter<myObject>, ItemReader<myObject> , StepExecutionListener{ 

private myPojo sharedObject; 

//Read method goes here 
public myObjectread() throws Exception{ 

} 
// Write method goes here 
public void write(List<? extends myObject> arg0) 
throws Exception { 

} 


//After job 
@Override 
public ExitStatus afterStep(StepExecution stepExecution) { 

} 

} 
+0

它有幫助嗎? – Panther