私はバングブートを使用して、送信する必要がある送信バッチを作成し、レコードが見つからない場合にのみヘッダーで空のファイルを作成します。バーンバッチを使用して空のボディでCSVファイルを書き込む方法
私はJdbcCursorItemReaderをマップするためにBeanPropertyRowMapperを使用しています...なぜ、BeanPropertyRowMapperを使用するのは、マップする列が多いためです。もし私がrowmapperを使用しているなら、それは私のために地獄になるでしょう。 myDBreader()クエリが空の結果を返す場合
@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();
}
問題がある、私のコードは文句を言わないので、またmyWriterをmyProcessorに行く:これは構成です。
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;
}
なしエラースローが、それは文句を言わないで、私のすべてのプロセッサに行く、それだけでシャットダウンジョブ。
問題は私の読者は、空の結果セットを返す場合、問題は、ヘッダーを作成する方法ではありませんしているだろう、私はすでにすべてを持っている私の作家で、私の作家に行くことはありません、それが動作文句を言いません結果セットが空でない場合は細かい。 –
ReadFillHeaderCallback.writeHeaderメソッドがまだ呼び出されていない場合でも、リーダーが行を読み取っていない。私は小さなテストプログラムを行い、writeHeaderメソッドが呼び出されても行データが読み書きされます – Niraj
明日テストして再度更新します –