上一篇已经介绍了如何将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。
时间: 2024-10-11 07:21:42