我使用spring boot来编写我的出站批处理,其中一个要求是发送并且只有在没有找到记录时才用标题清空文件。
我正在使用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;
}}
我的数据库读者:
@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;
}
没有错误抛出,但如果我把读取后的调试点放在我的处理器上,它就会关闭工作。
答案 0 :(得分:0)
您可以实现headers: {
'Content-Type': 'application/json',
'Accept': 'application/octet-stream'
}
来编写文件头。
配置FlatFileHeaderCallback
的一些示例代码。即使读者没有读取任何记录FlatFileHeaderCallback
将被调用并将写入标题。最终文件只有标题
FlatFileHeaderCallback