上一篇已经介绍了如何将csv文件中的内容导入到数据库中,这一片我们来看看如何将数据库中的数据导出到csv文件中

在上一篇的基础上,我们新加内容,就不重新新建maven项目了

首先在原来的项目上面的java包下新建一个configuration,用来配置job的相关内容,为与上篇区分,我们取名为Configuration_DB_2_CSV,代码如下:

 1 @Configuration
 2 @EnableBatchProcessing
 3 public class Configuration_DB_2_CSV {
 4     @Bean
 5     public ItemReader<User> reader(DataSource dataSource) {
 6         JdbcCursorItemReader<User> reader = new JdbcCursorItemReader<User>();
 7         reader.setDataSource(dataSource);
 8         reader.setSql("SELECT user_id,user_name,address,birth,gender FROM user");
 9         reader.setRowMapper(new BeanPropertyRowMapper<User>(User.class));
10         return reader;
11     }
12 
13     @Bean
14     public ItemProcessor<User, String> processor() {
15         return new UserItemProcessor_DB_2_CSV();
16     }
17 
18     @Bean
19     public ItemWriter<String> writer() throws IOException {
20         FlatFileItemWriter<String> writer = new FlatFileItemWriter<String>();
21         writer.setResource(new PathResource("test.csv"));
22         DelimitedLineAggregator<String> delimitedLineAggregator = new DelimitedLineAggregator<String>();
23         delimitedLineAggregator.setDelimiter(",");
24         writer.setLineAggregator(delimitedLineAggregator);
25         return writer;
26     }
27 
28     @Bean
29     public Job exportUserJob(JobBuilderFactory jobs, Step s1) {
30         return jobs.get("exportUser")
31                 .incrementer(new RunIdIncrementer())
32                 .flow(s1)
33                 .end()
34                 .build();
35     }
36 
37     @Bean
38     public Step step1(StepBuilderFactory stepBuilderFactory, ItemReader<User> reader,
39             ItemWriter<String> writer, ItemProcessor<User, String> processor) {
40         return stepBuilderFactory.get("step1")
41                 .<User, String> chunk(10)
42                 .reader(reader)
43                 .processor(processor)
44                 .writer(writer)
45                 .build();
46     }
47 
48     @Bean
49     public JdbcTemplate jdbcTemplate(DataSource dataSource) {
50         return new JdbcTemplate(dataSource);
51     }
52 
53 }

接下来,我们需要添加处理程序PersonItemProcessor_DB_2_CSV,由于我们目前是将DB数据库处理存放在CSV文件中,最终的形式是以字符串的格式存放,所以在我们处理的返回值类型定为String类型,这样后期我们的处理会方便很多。下面我们直接将我们的处理程序贴出来,在这里,根据项目的需要,对不同filed进行处理。我们这只是一个demo。

 1 public class UserItemProcessor_DB_2_CSV implements ItemProcessor<User, String> {
 2 
 3     @Override
 4     public String process(final User user) throws Exception {
 5         //DB2CSV
 6         final String userId = "2014010"+ user.getUserId();
 7         final String gender = user.getGender().equals("M")?"male":"female";
 8         SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月DD日");
 9         final String birth = sdf.format(user.getBirth());
10         final String userName = user.getUserName().substring(0,1).toUpperCase()+user.getUserName().substring(1).toLowerCase();
11         final String address= user.getAddress().substring(0,1).toUpperCase()+user.getAddress().substring(1).toLowerCase();
12         return userId+","+userName+","+getAddress+","+birth+","+gender;
13     }
14 }

最后一步,为了防止写文件没有用,这里我么需要将之前resources包下面的schema_all.sql删除,或者建表语句更换掉,防止将数据库中的数据删除了。同时需要将上一篇的Configuration文件中的@Configuration和@EnableBatchProcessing注解注释掉,否则会让系统分不清使用什么配置,启动那一个job。