SpringBatch 简单示例

来源:互联网 发布:学校资产管理系统源码 编辑:程序博客网 时间:2024/04/28 08:36

场景说明

个人使用信用卡消费,银行定期发送银行卡消费账单,本例模拟银行处理个人信用卡消费对账单对账,银行需要定期地把个人消费的记录导出成CSV格式的文件,然后交给对账系统处理,本例模拟银行读入CSV文件,经过处理后,生成新的对账单。

这里写图片描述

项目结构

这里写图片描述

CreditBill.java :表示信用卡消费记录领域对象
CreditBillProcessor.java :记录处理类,本场景中没有任何业务操作,仅打印账单信息。
JobLaunch.java :调用批处理作业类。
JobLaunchTest.java : JUnit单元测试类,使用Spring提供的测试框架类。
credit-card-bill-201303.csv:原始账单文件,存放账单消费条目。
job.xml:作业定义文件
job-context.xml:SpringBatch批处理任务需要的基本信息。

CreditBill.java

/** * 信用卡对账单模型.<br> * @author bruce.liu(mailto:jxta.liu@gmail.com) * 2013-1-6下午09:56:02 */public class CreditBill {    private String accountID = "";  /** 银行卡账户ID */    private String name = "";       /** 持卡人姓名 */    private double amount = 0;      /** 消费金额 */    private String date;            /** 消费日期 ,格式YYYY-MM-DD HH:MM:SS*/    private String address;         /** 消费场所 **/

job-context.xml

job-context.xml 定义了批处理任务中需要的基础设施,主要配置有 作业仓库、作业调度器、事务管理器

    <!-- 作业仓库 -->    <bean id="jobRepository"         class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean">    </bean>    <!-- 作业调度器 -->    <bean id="jobLauncher"         class="org.springframework.batch.core.launch.support.SimpleJobLauncher">        <property name="jobRepository" ref="jobRepository"/>    </bean>    <!-- 事物管理器 -->    <bean id="transactionManager"         class="org.springframework.batch.support.transaction.ResourcelessTransactionManager"/>

作业仓库:在SpringBatch框架中,任何任务的操作都会被记录在作业仓库中,SpringBatch提供了两种仓库,一种是内存的,另外一种是数据库的。
作业调度器:用来启动job。
事务管理器:用于在SpringBatch框架中对数据操作过程中提供事物的能力

定于对账job

job.xml中定义批处理作业billJob,billJob共有一个Step,命名为billStep,包含读、处理、写三个操作。

    <job id="billJob">        <step id="billStep">            <tasklet transaction-manager="transactionManager">                <chunk reader="csvItemReader" writer="csvItemWriter"                     processor="creditBillProcessor" commit-interval="2">                </chunk>            </tasklet>        </step>    </job>

这里写图片描述

                <chunk reader="csvItemReader" writer="csvItemWriter"                     processor="creditBillProcessor" commit-interval="2">                </chunk>

csvItemReader负责从文件credit-card-bill-201303.csv中读取数据,creditBillProcessor负责处理文件中的每一行数据,csvItemWriter负责将creditBillProcessor处理的数据写到文件outputFile.csv中;
commit-interval=2,表示提交间隔的大小,即每处理2条数据,进行一次写入操作

csvItemReader配置

    <!-- 读取信用卡账单文件,CSV格式 -->    <bean:bean id="csvItemReader"        class="org.springframework.batch.item.file.FlatFileItemReader"         scope="step">        <bean:property name="resource"             value="classpath:credit-card-bill-201303.csv"/>        <bean:property name="lineMapper">            <bean:bean                 class="org.springframework.batch.item.file.mapping.DefaultLineMapper">                <bean:property name="lineTokenizer" ref="lineTokenizer"/>                <bean:property name="fieldSetMapper">                    <bean:bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">                        <bean:property name="prototypeBeanName" value="creditBill">                        </bean:property>                    </bean:bean>                </bean:property>            </bean:bean>        </bean:property>    </bean:bean>    <!-- lineTokenizer -->    <bean:bean id="lineTokenizer"         class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">        <bean:property name="delimiter" value=","/>        <bean:property name="names">            <bean:list>                <bean:value>accountID</bean:value>                <bean:value>name</bean:value>                <bean:value>amount</bean:value>                <bean:value>date</bean:value>                <bean:value>address</bean:value>            </bean:list>        </bean:property>    </bean:bean>

这里写图片描述

0 0
原创粉丝点击