首页 > 代码库 > 关于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)