2014-10-05 13 views
4

我正在嘗試使用下面的配置文件配置沒有條目編寫器的彈簧批量步驟。不過,我得到錯誤說,作家 元素既沒有「作家」屬性也沒有元素。如何在沒有條目編寫器的情況下編寫彈簧批步驟

我通過鏈接spring batch : Tasklet without ItemWriter。但無法解決問題。 可以在任何一個告訴我具體變化的代碼片段進行我提到

<batch:job id="helloWorldJob"> 
     <batch:step id="step1"> 
      <batch:tasklet> 
       <batch:chunk reader="cvsFileItemReader" 
        commit-interval="10"> 
       </batch:chunk> 
      </batch:tasklet> 
     </batch:step> 
    </batch:job> 

    <bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader"> 

     <property name="resource" value="classpath:cvs/input/report.csv" /> 

     <property name="lineMapper"> 
      <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> 
       <property name="lineTokenizer"> 
        <bean 
         class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> 
         <property name="names" value="id,sales,qty,staffName,date" /> 
        </bean> 
       </property> 
       <property name="fieldSetMapper"> 
        <bean class="com.mkyong.ReportFieldSetMapper" /> 

        <!-- if no data type conversion, use BeanWrapperFieldSetMapper to map by name 
        <bean 
         class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"> 
         <property name="prototypeBeanName" value="report" /> 
        </bean> 
        --> 
       </property> 
      </bean> 
     </property> 

    </bean> 
+0

爲什麼要基於塊的閱讀,但之後放下一切?爲什麼你只會閱讀而不寫任何東西?對於基於塊的處理,讀寫器是強制性的,只有處理器是可選的,這是非常有意義的,因爲在沒有寫入的情況下閱讀並不合理...... – 2014-10-06 07:28:09

+0

該tasklet如何不適合你?我正在調用一個tasklet中的過程,它工作得很好。如果你不需要(爲什麼你需要)基於塊的閱讀,爲什麼不是一個簡單的tasklet呢? – Shilan 2017-03-01 10:04:25

回答

5

對於基於塊級讀寫器是強制性的。
如果您不想讓作家使用無操作的ItemWriter,它不會執行任何操作。

編輯:
一個無操作的實現是一個空的接口實現......沒什麼!
只需讓你的類用空方法實現可接受的接口。

空操作ItemWriter:

public class NoOpItemWriter implements ItemWriter { 
    void write(java.util.List<? extends T> items) throws java.lang.Exception { 
    // no-op 
    } 
} 
+0

可以請你告訴我如何在上面的例子中配置一個無操作的itemwriter ..我是一個初學者,因此需要一些基本的幫助..在此先感謝。 – user3247376 2014-10-06 02:50:18

+0

Thankyou so much ..在發佈NoOpItemWriter之前實現了實現..或者更確切地說,在我發佈相同的問題..謝謝反正.. :) – user3247376 2014-10-06 08:33:03

+1

@Luca Basso Ricci - 因爲我們需要爲處理器指定輸入和輸出類型並且寫入器的輸入類型也是這樣,處理器在這裏返回'null'就夠了嗎?另外,由於這裏沒有寫入任何內容,因此指定塊大小盡可能高是明智的嗎?有關塊大小/提交間隔值的任何建議? – 2016-10-05 11:48:09

1

我希望你有答案,但我想解釋一下其他讀者,當我們使用大塊話,通常我們聲明閱讀器,處理器和作家。塊讀取器和寫入器是強制性的,處理器是可選的。在你的情況下,如果你不需要作家,那麼你需要創建一個實現ItemWriter的類。重寫寫入方法並將其保留爲空。現在創建一個作家類的bean並將其作爲作者的參考。

<batch:step id="recordProcessingStep" > 
     <batch:tasklet> 
      <batch:chunk reader="fileReader" processor="recordProcessor" 
       writer="rocordWriter" commit-interval="1" /> 
     </batch:tasklet> 
    </batch:step> 

你的作家類看起來像。

public class RecordWriter<T> implements ItemWriter<T> { 
@Override 
public void write(List<? extends T> items) throws Exception { 
    // TODO Auto-generated method stub 

} 

}

1

maven repo你可以找到框架 「彈簧批次樣品」。
在此框架內,你會發現這個作家:

org.springframework.batch.sample.support.DummyItemWriter 
相關問題