如何使用Spring批处理用空体写csv文件

时间:2017-07-02 08:02:29

标签: spring-boot spring-batch

我使用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;
}

没有错误抛出,但如果我把读取后的调试点放在我的处理器上,它就会关闭工作。

1 个答案:

答案 0 :(得分:0)

您可以实现headers: { 'Content-Type': 'application/json', 'Accept': 'application/octet-stream' } 来编写文件头。

http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/file/FlatFileHeaderCallback.html

配置FlatFileHeaderCallback的一些示例代码。即使读者没有读取任何记录FlatFileHeaderCallback将被调用并将写入标题。最终文件只有标题

FlatFileHeaderCallback