跑批利器--读取文件

article/2025/10/16 3:20:19

      在上篇文章中已经对示例的基本业务和流程进行了解,同时也知道了SpringBatch的三个接口ItemReader,ItemProcessor,ItemWriter.接下来我们主要是通过示例来具体处理一个文本文件,将里面的数据和内容通过SpringBatch的加工处理来存到新的数据库中.

      SpringBatch提供专门的类去读取文本文件:FlatFileItemReader.要用这个类的话我们需要配置一个Springbean并实现一个组件用来创建领域对象.剩下的就交给SpringBatch,我们不需要再关注关于I/O具体的处理实现.

       下面是一个富文本文件的例子,通常都是有一行一行的数据构成

       

PRODUCT_ID,NAME,DESCRIPTION,PRICE

PR....210,BlackBerry8100 Pearl,A cell phone,124.60

PR....211,SonyEricsson W810i,Yet another cell phone!,139.45

PR....212,SamsungMM-A900M Ace,A cell phone,97.80

PR....213,ToshibaM285-E 14,A cell phone,166.20

PR....214,Nokia2610 Phone,A cell phone,145.50

 

接下来我们还要有对应每个记录的产品实体类,一个实例代表着一条记录.如下:

   

importjava.math.BigDecimal;

publicclass Product {

privateString id;

privateString name;

privateString description;

privateBigDecimal price;

(...)

}

 

        然后我们通过FlatFileItemReader类来 创建一个产品对象从产品文件中.它基本上提供了所有的I/O操作,例如打开一个文件,通过流来一行行的读取,随后再关掉这个文件.LineMapper是实现一行行的产品记录转换成一个个对象的桥梁,SpringBatch提供了一个LineMapper的实现类:DefaultLineMapper.如下图:

计算机生成了可选文字:FlatF Re ader line reading DefaultLineMapper "its line Delimited LineTokenizer Transforms line in dornain Object Prod uctF ieIdSetMapper

     我们可以通过FieldSetMapper将一行行的产品记录通过LineTokenizer来进行分割并转换成一个java对象,FieldSetMapper接口如下:

 

publicinterface FieldSetMapper<T> {

TmapFieldSet(FieldSet fieldSet) throws BindException;

}

FieldSet的参数来自于LineTokenizer,可以把它当做一个jdbc的结果集,下面的代码片段示例ProductFieldSetMapper的实现

 

importorg.springframework.batch.item.file.mapping.FieldSetMapper;

importorg.springframework.batch.item.file.transform.FieldSet;

importorg.springframework.validation.BindException;

importcom..domain.Product;

 

publicclass ProductFieldSetMapper implements FieldSetMapper<Product> {

publicProduct mapFieldSet(FieldSet fieldSet) throws BindException {

Productproduct = new Product();

product.setId(fieldSet.readString("PRODUCT_ID"));

product.setName(fieldSet.readString("NAME"));

product.setDescription(fieldSet.readString("DESCRIPTION"));

product.setPrice(fieldSet.readBigDecimal("PRICE"));

returnproduct;

}

}

     从上述的代码片段中我们可以看到它主要的工作是将文本文件里的记录转换成一个product对象,仔细看参数里的字符串,PRODUCT_ID,

 NAME,DESCRIPTION,PRICE等,这些是从哪里来的?它们是LineTokenizer的配置里的内容,接下来我们再研究如何配置FlatFileItemReaderSpring容器里.

 

<beanid="reader"class="org.springframework.batch.item.file.FlatFileItemReader">

<propertyname="resource" value="file:./work/output/output.txt" />

<propertyname="linesToSkip" value="1" />

<propertyname="lineMapper">

<beanclass="org.springframework.batch.item.file.mapping.DefaultLineMapper">

<propertyname="lineTokenizer">

<bean

class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">

<propertyname="names" value="PRODUCT_ID,

 NAME,DESCRIPTION,PRICE" />

</bean>

</property>

<propertyname="fieldSetMapper">

<beanclass="com.manning.sbia.ch01.batch.ProductFieldSetMapper" />

</property>

</bean>

</property>

</bean>

 

      上面的资源属性文件定义了文件的读取,因为第一行的内容包括头,所以我们通过lineToSkip属性告诉SpringBatch跳过第一行的内容不处理.通过DelimitedLineTokenizer将一行行的记录字段通过逗号分隔符分开.然后我们给每个字段都定义了对应的名字,这些名字就是要在ProductFieldSetMapper类中用到的FieldSet.最终达到了我们想要的效果.

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/b3Eemiyc.shtml

相关文章

金融任务实例实时、离线跑批,Apache DolphinScheduler 在新网银行的三大应用场景与五大优化...

在新网银行&#xff0c;每天都有大量的任务实例产生&#xff0c;其中实时任务占据多数。为了更好地处理任务实例&#xff0c;新网银行在综合考虑之后&#xff0c;选择使用 Apache DolphinScheduler 来完成这项挑战。如今&#xff0c;新网银行多个项目已经完成了实时与准实时的跑…

线程并发处理跑批任务

定时任务类代码&#xff1a; package com.jzfq.rms.autoApprove.job;import com.alibaba.fastjson.JSONObject; import com.jzfq.rms.autoApprove.bean.InnerRuleProcess; import com.jzfq.rms.autoApprove.bean.InnerRuleProcessQueryBean; import com.jzfq.rms.autoApprove.s…

Oracle-job跑批变慢案例

前言: 近期处理了一起应用job跑批变慢的案例&#xff0c;在一天job执行时间突然增加了几十倍&#xff0c;后面通过分析是由于索引的设计不合理导致执行计划的异常&#xff0c;把当时的问题分析过程记录下来&#xff0c;分享给大家。 问题: 数据库job存储执行时间增加几十倍 原因…

架构师自诉:如何做到百万数据半小时跑批结束

业务背景 跑批通常指代的是我们应用程序针对某一批数据进行特定的处理 在金融业务中一般跑批的场景有分户日结、账务计提、欠款批扣、不良资产处理等等 具体举一个例子 &#x1f330; 客户在我司进行借款&#xff0c;并约定每月 10 号码还款&#xff0c;在客户自主授权银行…

基于Kettle跑批的案例说明

需求概述 通过动态配置表的方式完成在kettle里动态配置参数&#xff0c;并调用ktr&#xff0c;实现跑批的目的。 问题分析 定义一个ktr读取配置表的信息并将拷贝记录到结果定义一个ktr从结果里获取记录并设置变量定义业务ktr&#xff08;即按照业务需要开发的…

学习笔记-如何设计离线跑批系统

一、基本概念 离线跑批&#xff1a;通常指批量加工数据、完成一系列流程的定时任务。 业务场景&#xff1a;在银行、金融、支付出现较多&#xff0c;其他行业也可能涉及。 1. 定时的数据状态更新&#xff08;到期失效&#xff09; 2. 数据计算&#xff08;计算罚息、计提&…

跑批利器--示例

接下来我们将通过简单的一个在线商店的应用示例来展示如何使用SpringBatch.通过这个示例我们可以进一步去理解SpringBatch批量处理程序它是如何实现高效的读写数据,何时去使用内部组件,如何实现你自己的组件,以及如何配置一个批量任务在Spring容器中. 这里我们简单描述一下业务…

如何设计一个多线程处理跑批功能

一、背景 最近承接了一个需求&#xff0c;背景是用户当天可以参与比赛竞猜&#xff0c;当天20点前参与竞猜&#xff0c;第二天上午10点出结果。系统的实现思路是用户参与竞猜时增加竞猜记录&#xff0c;第二天早上9点开始进行跑批&#xff0c;跑批依赖业务的配置&#xff0c;要…

跑批利器--批处理应用程序

目前笔者正在进行直销银行互联网核心的设计和研发,在银行相关系统中有一块内容比较关键,那就是跑批.因此接触到了SpringBatch的相关内容,作为学习和记录,有必要将SpringBatch的相关技术点和实际项目中遇到的问题记录下来,同时也跟各位来进行分享和学习. 首先先了解一下什么是批…

跑批 流程、代码梳理

权限系统 全部——ETL服务——计划维护 日程表&#xff1a;到时间触发跑批任务 复制任务编号 ETL设计——作业设计——自定义java——插入语句 找到类所在位置 org.isscloud.portal.agent.scf.batch.FinaResultBatch base下的agent下的scf.batch包下的FinaResultBatch类 S…

跑批为什么这么难

文章目录 问题分析SPL用于跑批应用效果SPL资料 业务系统产生的明细数据通常要经过加工处理&#xff0c;按照一定逻辑计算成需要的结果&#xff0c;用以支持企业的经营活动。这类数据加工任务一般会有很多个&#xff0c;需要批量完成计算&#xff0c;在银行和保险行业常常被称为…

Java开源专业计算引擎:跑批真的这么难吗?

业务系统产生的明细数据通常要经过加工处理&#xff0c;按照一定逻辑计算成需要的结果&#xff0c;用以支持企业的经营活动。这类数据加工任务一般会有很多个&#xff0c;需要批量完成计算&#xff0c;在银行和保险行业常常被称为跑批&#xff0c;其它像石油、电力等行业也经常…

银行跑批业务 的 初步理解(批量批量.....流水账)

一、初步理解 白天的柜台交易, 实时的 对帐户进行操作。 晚上 批量 , 比如 一些报表的生成 , 定期储蓄到期的自动转存 , 行内行外业务清分清算 &#xff0c; 有时还可能赶上利息计算....... 当然 不是所有的数据都是实时操作 , 因此跑批就是为此诞生。 二、逐渐深入 批量…

跑批设计-如何才能让跑批更加高速

跑批的应用场景 在开发过程中跑批经常使用的地方&#xff1a; 消息类&#xff1a;到期失效以及到期批量通知客户计算类&#xff1a;在财务中的罚息、计提、计息文件类&#xff1a;对账信息、还款信息同步以及报表生成 跑批数据特点 数据量非常大实时性并不是特别高&#xf…

跑批bat、shell

“跑批”也叫“批量处理”。批处理&#xff0c;也称为批处理脚本。顾名思义&#xff0c;批处理就是对某对象进行批量的处理&#xff0c;通常被认为是一种简化的脚本语言&#xff0c;它应用于DOS和Windows系统中。批处理文件的扩展名为bat 。 批处理定义&#xff1a;顾名思义&a…

gPRC基础教程

1.什么是RPC? RPC 远过程调用.在理解远程调用之前,首先我们来了解一下本地调用,只有更好的理解了本地调用,才能更好的理解RPC. 1.1 本地调用ex:本地的函数调用在函数调用的时候,一般会经过几个步骤 返回地址入栈参数入栈提升堆栈空间函数参数的复制执行函数调用清空堆栈 1.…

GPRM/GNRMC定位信息的读取与解析

GPRM/GNRMC定位信息的读取与解析 参考网址&#xff1a;http://www.cnblogs.com/88223100/p/GPRM_GNRMC_Transform.html 帧头 UTC时间 状态 纬度 北纬/南纬 经度 东经/西经 速度 $GPRMC hhmmss.sss A/V ddmm.mmmm N/S dddmm.mmmm E/W 节 方位角 UTC日期 磁偏角…

GPRMC转经纬度 地理位置

前言 一、GPRMC是什么&#xff1f; 二、GPRMC如何转经纬度 三、python加地图实现定位 1.Python代码 2.地图定位 四、通过python直接输出位置的尝试 1.需要用到的库geocoder 2.需要准备的库folium 总结 前言 在实际汽车路测的时候会出现GPS偏移&#xff0c;这个时候就需要将GPR…

USB转串口 模拟 PPS+GPRMC 进行授时

把 PC的系统时间 通过USB转串口发出来 来模拟 PPSGPRMC 授时, 这大冷天的, 用来在室内测试MCU或者SOC的授时功能, 传感器的授时与线束检测, 测试干扰等等, 还是比较合适的. 如下图, 左边为 USB转9针RS232串口, 右边为 USB转TTL串口 原理: PPS 有 3V3 / 5V / 12V 等规格, 这里…

GPC规范-SCP02

SPC02 流程 SPC02 指令 命令&#xff1a; 响应&#xff1a; 举例回复&#xff1a; 密钥分散数据&#xff1a; 0000FFFFFFFFFFFFFFFF Key Info&#xff1a; 20 02&#xff08;scp02&#xff09; Card挑战数&#xff1a; 001AC6619BE83082 Card加密值&#xff1a; 7…