首页 > 代码库 > 关于Spring batch的学习之DB2CSV(2)

关于Spring batch的学习之DB2CSV(2)

上一篇中我们基本完成了从数据库到文件的读写,但是上一篇的处理上面是返回字符串,这样在我们的处理过程会变的很简单,但是当我们如果处理程序返回的不是一个String类型的字符串,而是一个entity类型呢?那么在我们的writer的处理时候就会边的不一样了。

现在我们就来看看他们之间的区别。

我们如果对于Spring batch稍微有点了解的,都应该知道,写文件是通过FlatFileItemWriter类的对象完成的,要完成写操作,首先,我们需要提供一个resources给writer对象,告诉它文件往哪里写,另外,还需要通过DelimitedLineAggregator的对象来对我们处理过的信息进行相关的再处理,但他在处理信息的时候,需要我们提供一个Delimiter,也就是告诉他,如何将信息进行划分成一个一个的字段。如果我们从process返回来的是一个String类型,那么我们就不需要再做其他事情了,但是如果是返回来一个entity的话,我们还要告诉DelimitedLineAggregator对象,如何将我们返回来的entity与我们现有的对象类的每个字段相匹配。这样也就需要我们给DelimitedLineAggregator对象提供BeanWrapperFieldExtractor对象,这个对象里面就是用来帮助我们将返回来的entity与我们给定的names进行相关的匹配。所以,在这之前我们还需要给BeanWrapperFieldExtractor对象设置FieldExtractor,传给他一个names数组。

具体代码如下:

 1  @Bean 2     public ItemWriter<User> writer() throws IOException { 3         FlatFileItemWriter<String> writer = new FlatFileItemWriter<User>(); 4         writer.setResource(new PathResource("test.csv")); 5         DelimitedLineAggregator<User> delimitedLineAggregator = new DelimitedLineAggregator<User>(); 6         delimitedLineAggregator.setDelimiter(","); 7         String[] names = {"userId","userName","address","birth","gender"}; 8         BeanWrapperFieldExtractor<User> beanWrapperFieldExtractor = new BeanWrapperFieldExtractor<User>(); 9         beanWrapperFieldExtractor.setNames(names);10         delimitedLineAggregator.setFieldExtractor(beanWrapperFieldExtractor);11         writer.setLineAggregator(delimitedLineAggregator);12         return writer;13     }

 

关于Spring batch的学习之DB2CSV(2)