Springbatch数据处理常用的4种demo

Springbatch数据处理常用的4种demo

 

首先你需要知道Spring Batch是什么?
Spring Batch是一个基于Spring的企业级批处理框架,所谓企业批处理就是指在企业级应用中,不需要人工干预,定期读取数据,进行相应的业务处理之后,再进行归档的这类操作。从上面的描述中可以看出,批处理的整个流程可以明显的分为3个阶段:
1、读数据
2、业务处理
3、归档结果数据
另外,从定义中可以发现批处理的一个重要特色就是无需人工干预、定期执行,因此一个批处理框架,需要关注事务的粒度,日志监控,执行方式,资源管理,读数据,处理数据,写数据的解耦等方面。
SpringBatch为我们提供了什么呢?
1、统一的读写接口
2、丰富的任务处理方式、
3、灵活的事务管理及并发处理
4、日志、监控、任务重启与跳过等特性
注意,Spring Batch未提供关于批处理任务调度的功能,因此如何周期性的调用批处理任务需要自己想办法解决,比如使用Springboot定时任务等(如果需要了解请看我前段时间发的Springboot学习笔记,上面有3中定时任务实现方式)

 

此demo有4种:读文件–处理–写入文件;读文件–处理-写入数据库;读数据库-处理-写入数据库;读数据库–处理–写入文件;大部分是配置文件, demo下载在下面,不需要注册就能直接下载。下面贴出来核心配置和容易出错的地方。demo包括建表语句,和输入文件,记得先修改数据库信息,建好表。

点击下载:Springbatch数据处理常用的4种demo

 

方式:读文件–处理–写文件

<!– 读取文件配置 –>
<bean id=”productReader” class=”org.springframework.batch.item.file.FlatFileItemReader” scope=”step”>
<!–这里输入文件是使用动态传入的方式,注释掉的是写死的方式,二者选择其一即可–>
<!– <property name=”resource” value=”file:./sample.csv” /> –>
<property name=”resource” value=”file:#{jobParameters[‘inputFile’]}”/>
<!–跳过的行数 –>
<property name=”linesToSkip” value=”1″/>
<!–如何把一行数据映射成为一个模型 –>
<property name=”lineMapper”>
<bean class=”org.springframework.batch.item.file.mapping.DefaultLineMapper”>
<!– The lineTokenizer divides individual lines up into units of work –>
<property name=”lineTokenizer”>
<bean class=”org.springframework.batch.item.file.transform.DelimitedLineTokenizer”>
<!–为读取一行数据分配名称,如有多个,则此处多个值 –>
<property name=”names” value=”id,name,description,quantity”/>
</bean>
</property>
<!– 根据上面的字段如何映射成为模型,注意java 类中的read(“XXX”)属性 –>
<property name=”fieldSetMapper”>
<bean class=”com.wll.demo.FTF.ProductFieldSetMapper”/>
</property>
</bean>
</property>
</bean><bean id=”FTF_productWriter”
class=”org.springframework.batch.item.file.FlatFileItemWriter” scope=”step”>
<!–输出文件路径和名称,当前没有这个文件,所以是红色–>
<property name=”resource” value=”file:src/outputFile.txt”/>
<property name=”lineAggregator”>
<bean
class=”org.springframework.batch.item.file.transform.DelimitedLineAggregator”>
<!–delimiter标示输出的字段以什么分割–>
<property name=”delimiter” value=”,”></property>
<!–fieldExtractor 将Pojo对象组装成由Pojo对象的字段组成的一个字符串。同样FlatFileItemWriter写一条记录也有以下四步完成:
1,Processor传递过来一个对象给lineAggregator;2,lineAggregator将其这个对象转化成一个数组;
3,再由lineAggregator的属性fieldExtractor将数组转化成按照delimiter分割一个字符串;4,将这个字符串输出。–>
<property name=”fieldExtractor”>
<bean class=”org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor”>
<property name=”names” value=”id,name,description,quantity”/>
</bean>
</property>
</bean>
</property>
</bean>

方式:读文件–处理–写数据库

公共配置文件里面有数据源和JdbcTemplate配置,所以在写到数据库的时候直接自动装载了个JdbcTemplate把数据插进去了。读文件和上面一样。

方式:读数据库–处理–写入数据库

注意需要配置2个数据源,如果是Springboo可以配置多数据源。其他项目可以多配置一套JdbcTemplate即可,下面贴出读数据库配置:

<!–基于游标方式从数据库读取数据–>
<bean id=”jdbcItemReader”
class=”org.springframework.batch.item.database.JdbcCursorItemReader”
scope=”step”>
<!–此处dataSource是链接到 源 数据库–>
<property name=”dataSource” ref=”dataSource”/>
<!–需要执行的sql,可以动态传入,写死是: select id,name,description,quantity from product where id &lt; ?–>
<property name=”sql” value=”#{jobParameters[‘sql’]}”/>
<property name=”rowMapper”>
<bean class=”org.springframework.jdbc.core.BeanPropertyRowMapper”>
<!–根据字段查询到的列,映射成为那个实体类–>
<property name=”mappedClass” value=”com.wll.demo.DTD.Product”/>
</bean>
</property>
<!–sql中参数配置器 如果sql中没有需要传入的参数,则不需要引入preparedStatementSetter
<property name=”preparedStatementSetter” ref=”paramStatementSetter”/>–>
</bean>
<bean id=”paramStatementSetter”
class=”org.springframework.batch.core.resource.ListPreparedStatementSetter”
scope=”step”>
<property name=”parameters”>
<!–sql中参数列表–>
<list>
<value>#{jobParameters[‘id’]}</value>
</list>
</property>
</bean>

方式:读数据库-处理-写入文件:

配置和上面差不多,具体看demo,我怕又有人说配置太长。

 

本站的文章多是老王开发工作中问题的记录,一个字一个字敲的,切实可行,可以分享,需要留个原文链接,至少也意思意思吧!
vsalw技术博客 » Springbatch数据处理常用的4种demo

你想下载这个主题吗?

沟通一下 扯会蛋