使用spring boot編寫我的出站批處理需要發送的文件之一,並且只有在沒有找到記錄的情況下清空標頭文件時才使用。如何使用Spring批量編寫帶空體的csv文件
即時通訊使用BeanPropertyRowMapper來映射我的JdbcCursorItemReader ...爲什麼我使用BeanPropertyRowMapper因爲有很多列映射。如果即時通訊使用rowmapper它將是我的地獄哈哈。如此配置:
@Bean
public Step RawDataOutBoundSteps() throws IOException {
return stepBuilderFactory.get("step1").<RawDataExtractionDTO, RawDataExtractionDTO>chunk(1000)//.faultTolerant()
//.skip(Exception.class)
//.skipLimit(1000)
.reader(myDBReader()).processor(myProcessor())
.writer(myWriter()).build();
}
的問題是,如果myDBreader()查詢返回空結果,我的代碼不會去myProcessor因此myWriter也。
myProcessor:
public class RawDataJobProcessor implements
ItemProcessor<RawDataExtractionDTO, RawDataExtractionDTO>{
@Override
public RawDataExtractionDTO process(RawDataExtractionDTO item) throws Exception {
System.out.println(" Raw DAta Process");
if(item == null)
return null;
return item;
}}
我DB讀者:
@Bean
ItemReader<RawDataExtractionDTO> rawDataDBReader() {
String jobName = Application.jobName;
String sql_query = "";
if("RawDataOutBoundweekly".equalsIgnoreCase(jobName)){
log.info("=========RawDataOutBoundweekly=========");
sql_query = "select * from vw_rawdata_weekly";
}else if("RawDataOutBoundmonthly".equalsIgnoreCase(jobName)){
log.info("================RawDataOutBoundmonthly=============");
sql_query = "select * from vw_rawdata_monthly";
}
log.info("ENTERING rawDataDBReader ===================");
JdbcCursorItemReader<RawDataExtractionDTO> datareader = new
JdbcCursorItemReader<>();
datareader.setSql(sql_query);
datareader.setDataSource(dataSource);
datareader.setRowMapper(new BeanPropertyRowMapper<>
(RawDataExtractionDTO.class));
return datareader;
}
沒有錯誤拋出,但是如果我把調試點我的讀者後,它不會去我的處理器的話,那只是關閉工作。
的問題不是如何寫一個標題,問題是,如果我的讀者返回空結果,我不會永遠不會去我的作家,在我的作家已經擁有了一切,它的工作如果結果集不爲空,則罰款 –
即使讀取器沒有讀取任何行,仍調用FlatFileHeaderCallback.writeHeader方法。我做了小測試程序,我的writeHeader方法被調用,即使有行數據讀取和寫入 – Niraj
好了將明天測試並再次更新 –