Spring Batch

Spring Batch

时光毁灭记忆、已成空白 提交于 2020-02-27 00:34:39
Flow 作业流,Spring Batch 支持一个Job中配置多个Step,不同的Step可以顺序执行,也可以按照不同的条件有选择地执行(条件通常使用Step的退出状态决定),通过 next 元素 或 decision 元素 来定义跳转规;此外还允许多个step并行执行,通过 split 元素 来定义。 顺序Step 配置如: <job id="xxJob"> <step id="stepA" next="stepB"/> <step id="stepB" next="stepC"/> <step id="stepC"/> </job> 条件Step 通过 next 元素实现: 属性: on 当step的ExitStatus 和 该属性值匹配时,则执行to指定的作业步。属性值可以是任意的字符串,同时支持通配符 * ? * 表示退出状态为任何值都满足 ? 表示匹配一个字符串,如:C?T, 当退出状态为 CAT时候满足 to 指定下一个需要执行的step 示例配置如: <job id="xxJob"> <step id="stepA" next="stepB"/> <step id="stepB" > <next on="*" to="stepC"/> <next on="MY_EXIT_CODE" to="stepD"/> </step> <step id="stepC" next

Spring Batch 配置一个步骤(Step)

元气小坏坏 提交于 2020-02-26 05:42:09
如我们在 域语言(Domain Language) 章节中讨论的内容一致,一个 步骤(Step)是一个独立封装了执行顺序的批量作业(Job),并且包含有用于定义和控制一个批量作业的所有独立信息。 针对这个 Step 的定义必然是非常模糊的,因为任何一个给定步骤的内容都会被要求开发人员在编写一个作业(job)的时候被描述。 一个步骤(Step)可以根据开发人员的需求被开发为简单或者复杂。 一个简单的步骤可能就仅仅是从文件中载入数据然后写入到数据库中,可能并不需要太多的代码或者甚至都不需要代码(这个取决你需要的实现)。一个步骤(Step)也可能会比较复杂,这是因为你将要在数据处理的过程中实现一些复杂的业务规则,如下图所示: 图片 1. 步骤(Step) https://www.cwiki.us/display/SpringBatchZH/Configuring+a+Step 来源: oschina 链接: https://my.oschina.net/u/2344080/blog/3171458

沉淀-我的2019

回眸只為那壹抹淺笑 提交于 2020-01-07 01:07:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1. 总体感受 又到年终,在2019年最后一天,回顾今年,仿佛是转眼之间的事。时间像是有加速度,过得越来越快。无法追赶时间,只能写下年终总结,记录今年的痕迹。今年总体来说过得比较平稳,在日常的生活和工作中,开始注重知识、技能的沉淀。有通过读书学习的输入,也有通过Blog作为知识的输出。对人生、工作、管理、技术有了更多的思考。 今年的关键词:平稳,沉淀,输出。 2. 成果与感悟 今年主要划分为三个阶段,年初根据项目需要,进行数据集成平台开发,统一公司的数据集成基础,同时基于使用的Spring Batch技术进行博客编写。年中转变工作模式,偏向管理与架构,通过制定部门技术管理规范,制定项目管理流程、理顺部门的产品开发流程,提高开发效率。年末主要是技术开发工作,实现基础组件,包括接口文档生成与对接方式,代码生成系统,数据库设计流程、微服务改造等。在日常通勤的路上,完成了大部分书籍的阅读。 2.1 成果 主要从两方面总结一下成果: 学习输入 阅读10本编程技术类书籍、15本科普类书籍、8本经管励志类书籍、17本人文类书籍。对此,我写了一篇 《2019读过的好书推荐》 进行总结。 对Spring Batch技术有了深入学习与了解 对Spring Boot及Spring Cloud有更深入的使用和理解。 对开发规范

Spring Batch 批量处理策略

泪湿孤枕 提交于 2019-12-10 02:06:42
为了帮助设计和实现批量处理系统,基本的批量应用是通过块和模式来构建的,同时也应该能够为程序开发人员和设计人员提供结构的样例和基础的批量处理程序。 当你开始设计一个批量作业任务的时候,商业逻辑应该被拆分一系列的步骤,而这些步骤又是可以通过下面的标准构件块来实现的: 转换应用程序(Conversion Applications) :针对每一个从外部系统导出或者提供的各种类型的文件,我们都需要创建一个转换应用程序来讲这些类型的文件和数据转换为处理所需要的标准格式。这个类型的批量应用程序可以是正规转换工具模块中的一部分,也可以是整个的转换工具模块(请查看:基本的批量服务(Basic Batch Services))。 校验应用程序(Validation Applications) :校验应用程序能够保证所有的输入和输出记录都是正确和一致的。校验通常是基于头和尾进行校验的,校验码和校验算法通常是针对记录的交叉验证。 提取应用(Extract Applications) : 这个应用程序通常被用来从数据库或者文本文件中读取一系列的记录,并对记录的选择通常是基于预先确定的规则,然后将这些记录输出到输出文件中。 提取/更新应用(Extract/Update Applications) :这个应用程序通常被用来从数据库或者文本文件中读取记录,并将每一条读取的输入记录更新到数据库或者输出数据库中。

Spring-Batch处理MySQL数据后存到CSV文件

匆匆过客 提交于 2019-12-04 07:24:41
1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件。 1.1 准备表及数据 user test; DROP TABLE IF EXISTS `test_user`; CREATE TABLE `test_user` ( `id` int(11) NOT NULL auto_increment, `name` varchar(45) NOT NULL default '', `birthday` datetime default NULL, `age` int default 0, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; INSERT INTO test_user(name, birthday, age) VALUES('小明', '1993-03-09', 0); INSERT INTO test_user(name, birthday, age) VALUES('Jack', '1973-03-09', 0); INSERT INTO test_user(name, birthday, age) VALUES('Tom', '1963-03-09', 0); INSERT INTO test

Spring Batch JSON 支持

为君一笑 提交于 2019-12-03 20:53:50
Spring Batch 4.1 开始能够支持 JSON 格式了。这个发布介绍了一个新的数据读(item reader)能够读取一个 JSON 资源,这个资源按照下面的格式: [ { "isin": "123", "quantity": 1, "price": 1.2, "customer": "foo" }, { "isin": "456", "quantity": 2, "price": 1.4, "customer": "bar" } ] 与针对 XML 的 StaxEventItemReader 类似,新的 JsonItemReader 使用流 API(streaming APIs)来读取 JSON 对象到块中。Spring Batch 能够支持下面 2 个库: Jackson Gson 如果你还希望添加其他的库的话,你可以实现 JsonObjectReader 接口。 JSON 数据的写是通过 JsonFileItemWriter 来支持的。 有关更多 JSON 数据的支持,请参考 ItemReaders and ItemWriters 章节中的内容。 https://www.cwiki.us/display/SpringBatchZH/JSON+support 来源: oschina 链接: https://my.oschina.net/u/2344080/blog

Spring Batch 体系结构

倾然丶 夕夏残阳落幕 提交于 2019-12-03 14:52:45
Spring Batch 设计的时候充分考虑了可扩展性和各类终端用户。 下图显示了 Spring Batch 的架构层次示意图,这种架构层次为终端用户开发者提供了很好的扩展性与易用性. 上图显示的是 Spring Batch 层级体系结构 这个层级体系结构高亮显示了 Spring Batch 的 3 个主要组件:应用(Application),核心(Core)和 基础架构(Infrastructure)。 应用层包含了所有的批量作业和开发者使用 Spring Batch 写的所有自定义代码。批量核心层包含了所有运行和控制批量作业所需必要的运行时类。同时还包括了有 JobLauncher , Job , 和 Step 的实现。应用层和核心层都构建在基础架构层之上。 基础架构层包含了有 读(readers)和 写(writers )以及服务(services)。例如有针对服务使用, RetryTemplate 。基础架构层的这些东西,这些能够被应用层开发(readers 和 writers,例如 ItemReader 和 ItemWriter )和批量核心框架(例如,retry,这个是核心层自己的库)所使用。 简单的来说,基础架构层为应用层和批量核心层提供了所需要的的基础内容,是整个 Spring Batch 的基础。我们针对 Spring Batch

Spring Batch 背景

左心房为你撑大大i 提交于 2019-12-02 22:55:18
在开源项目及其相关社区把大部分注意力集中在基于 web 和 SOA 基于消息机制的框架中时,基于 Java 的批处理框架却无人问津,尽管在企业 T 环境中一直都有这种批处理的需求。但因为缺乏一个标准的、可重用的批处理框架导致在企业客户的IT系统中存在着很多一次编写,一次使用的版本,以及很多不同的内部解决方案。 SpringSource 和 Accenture(埃森哲)致力于通过合作来改善这种状况。埃森哲在实现批处理架构上有着丰富的产业实践经验,SpringSource 有深入的技术开发积累,背靠Spring框架提供的编程模型,意味着两者能够结合成为默契且强大的合作伙伴,创造出高质量的、市场认可的企业级 Java 解决方案,填补这一重要的行业空白。两家公司目前也正着力于开发基于 Spring 的批处理解决方案,为许多客户解决类似的问题。这同时提供了一些有用的额外的细节和以及真实环境的约束,有助于确保解决方案能够被客户用于解决实际的问题。基于这些原因,SpringSource 和 Accenture 一起合作开发了 Spring Batch。 埃森哲已经贡献了先前自己的批处理体系结构框架,这个框架基于数十年宝贵的经验并基于最新的软件平台(如COBOL/Mainframe, C++/Unix 及现在非常流行的Java平台)来构建 Spring Batch 项目,Spring Batch

Spring Batch(1)——数据批处理概念

岁酱吖の 提交于 2019-11-30 08:14:18
批处理的核心场景 从某个位置读取大量的记录,位置可以是数据库、文件或者外部推送队列(MQ)。 根据业务需要实时处理读取的数据。 将处理后的数据写入某个位置,可以是数据库、文件或者推送到队列。 Spring Batch能解决的批处理场景 Spring Batch为批处理提供了一个轻量化的解决方案,它根据批处理的需要迭代处理各种记录,提供事物功能。但是Spring Batch仅仅适用于"脱机"场景,在处理的过程中不能和外部进行任何交互,也不允许有任何输入。 Spring Batch的目标 开发人员仅关注业务逻辑,底层框架的交互交由Spring Batch去处理。 能够清晰分离业务与框架,框架已经限定了批处理的业务切入点,业务开发只需关注这些切入点(Read、Process、Write)。 提供开箱即用的通用接口。 快速轻松的融入Spring 框架,基于Spring Framework能够快速扩展各种功能。 所有现有核心服务都应易于更换或扩展,而不会对基础架构层产生任何影响。 Spring Batch结构 如上图,通常情况下一个独立的JVM程序就是仅仅用于处理批处理,而不要和其他功能重叠。 在最后一层基础设置(Infrastructure)部分主要分为3个部分。 JobLauncher 、 Job 以及 Step 。每一个 Step 又细分为 ItemReader 、

Spring Batch(5)——文件读写

Deadly 提交于 2019-11-30 07:25:02
在 Spring batch由上至下的结构 中 Job 、 Step 都是属于框架级别的的功能,大部分时候都是提供一些配置选项给开发人员使用,而 Item 中的 Reader 、 Processor 和 Writer 是属于业务级别的,它开放了一些业务切入的接口。 但是文件的读写过程中有很多通用一致的功能Spring Batch为这些相同的功能提供了一致性实现类。 扁平结构文件 扁平结构文件 (也称为矩阵结构文件,后文简称为文件)是最常见的一种文件类型。他通常以一行表示一条记录,字段数据之间用某种方式分割。与标准的格式数据(xml、json等)主要差别在于他没有结构性描述方案(SXD、JSON-SCHEME),进而没有结构性分割规范。因此在读写此类文件之前需要先设定好字段的分割方法。 文件的字段数据分割方式通常有两种: 使用分隔符 或 固定字段长度 。前者通常使用逗号( , )之类的符号对字段数据进行划分,后者的每一列字段数据长度是固定的。 框架为文件的读取提供了 FieldSet 用于将文件结构中的信息映射到一个对象。 FieldSet 的作用是将文件的数据与类的 field 进行绑定(field是Java中常见的概念,不清楚的可以了解Java反射)。 数据读取 Spring Batch为文件读取提供了 FlatFileItemReader 类