关于Spring batch的学习之DB2CSV

上一篇已经介绍了如何将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

关于Spring batch的学习之DB2CSV的相关文章

关于Spring batch的学习

最近在学习Spring batch相关的内容,网上也有不少Spring Batch相关的知识,不过大多都是使用xml进行配置的.这里是我用注解的方式进行相关的学习心得. 首先我们来看如何将一个文本文件中的内容导入到数据库中. 我们先来看一下我们所需要的环境.我们这里使用的是STS(Spring Tool Suite)当然也可以使用Eclipse(需要有maven插件)或者Myeclipse.我们使用的数据库是MySQl,当然也可以使用其他的数据库,根据自己的需要. 现在开始我们的文件到数据库的学

Spring batch的学习

Spring batch是用来处理大量数据操作的一个框架,主要用来读取大量数据,然后进行一定处理后输出成指定的形式. Spring batch主要有以下部分组成: JobRepository     用来注册job的容器 JobLauncher             用来启动Job的接口 Job                          实际执行的任务,包含一个或多个Step Step                        step包含ItemReader.ItemProces

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

Spring Batch学习笔记三:JobRepository

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch Job在运行时有很多元数据,这些元数据一般会被保存在内存或者数据库中,由于Spring Batch在默认配置是使用HSQLDB,也就是说在Job的运行过程中,所有的元数据都被储存在内存中,在Job结束后会随着进程的结束自动消失:在这里我们推荐配置JobRepository去使用MySQL. 在这种情况下,Spring Batch在单次执行或者从一个执行到另外一个执行的时候会使用数据库去维护状态,Job执行的信息包

Maven+Spring Batch+Apache Commons VF学习

Apache Commons VFS资料:例子:http://www.zihou.me/html/2011/04/12/3377.html详细例子:http://p7engqingyang.iteye.com/blog/1702429 Apache Commons VFS:文件系统工具,对不来自与不同的文件系统的文件进行操作,可以处理非本地文件(vfs中,原来存在ftp有时候不能正常关闭的情况,commons-vfs2 出了以后,该问题已经得到解决 )VFS为访问各种不同的文件系统提供了单一的应

Spring Batch学习笔记&mdash;&mdash;steps之间共享数据

名词说明: 上下文: 执行: 执行上下文: 案例: 警告:一旦steps共享数据,这些数据就会把这些steps连接起来.努力使steps独立.如果你实在是不能独立他们,才使用下面的技术.你应该把数据共享作为steps不能独立的后备方案. 1 数据共享方式: a step存储共享数据到数据库,receiving step从数据库读取他们 Execution context(执行上下文): 使用Spring  Batch execution context 作为data容器.a step往上下文写数

Spring Batch学习_ItemReaders and ItemWriters

All batch processing can be described in its most simple form as reading in large amounts of data, performing some type of calculation or transformation, and writing the result out. Spring Batch provides three key interfaces to help perform bulk read

Spring Batch学习

今天准备研究下Spring Batch,然后看了一系列资料,如下还是比较好的教程吧. 链接: http://www.cnblogs.com/gulvzhe/archive/2011/12/20/2295090.html 但在进行到 Spring Batch 之 Sample(CSV文件操作)(四) 时,发现了实战中的问题: outputFile.csv死活写不进结果!!! 想来想去,也尝试了n种调试,确定reader和process绝对没问题,那就writer出现问题了. 所以肯定是配置的csv

Spring Batch学习(一)介绍

为什么我们需要批处理? 我们不会总是想要立即得到需要的信息,批处理允许我们在请求处理之前就一个既定的流程开始搜集信息:比如说一个银行对账单,我们可以按月生成,并在用户查询之前开启一个批处理流程进行处理: 有时候它能让生意做得更好:比如说在线购物时,并不是说你买了一个产品零售商就立即发货,而是四五个小时后,统一发货: 更好的利用资源:让应该利用的处理能力闲置起来是一个大的浪费,我们可以定制处理让一个机器一个接一个的运行Job可以更好的利用机器的处理能力: 什么是批处理? 批处理是指在没有与用户进行