这个,我是从后面往前读的。因为从前往后是在看不懂。
1。
直接看 AppenedixB
很多数据库表的图,有主键键,有列名。
如:
表名有BATCH_JOB_INSTANCE,
主键有JOB_INSTANCE_ID
其他键VERSION,JOB_NAME,JOB_KEY
这就说明,spring batch 中的任务task可存在数据库中。其他的表有BATCH_JOB_PARAMS
BATCH_JOB_EXCUTION
BATCH_STEP_EXECUTION等。
batch根据这些表的内容,生成task,和executor,规则,
并从这些表中读取上次任务执行的进度,以便“断点续传”。
从后往前,依次讲了,
一个任务如何把结果传递给后续任务,
在没有输入时捕获步骤成功,
执行cmd命令,或者dos命令?
如果平面文件中,各个行有不同的解析规则,则可在配置文件中,根据行首字符串,分别为每行配置解析器。
某些数据库不能读取大量数据,容易锁住,那么可以先读取大量主键,而后通过主键一点一点取,边取边花,不怕贼偷钱。
在平面文件的最后行尾,书写概要总结,footer。
停止任务,由于业务原因,而不是突然停电,机房坏掉等。
写日志,包括处理过程,和处理失败日志。
以上是典型的Batch范式,就是常用用法,常备药。11章结束。
接着是UnitTest,测试先不管了。10章结束。
定义重试规则,任务失败需要重试的。如何修改xml配置文件,添加spring提供的拦截器,来处理重试。
重试的启发用的监听器,listener,open,onError,close三个方法。
回滚策略,重试之前要回滚。
重试策略,在什么情况下,或者捕获什么异常之后回滚。甚至可以为不同的异常采用不同的回滚方法。
无状态回滚,有状态回滚。。因为阅读时从文章后面往前的,那么有状态回滚和重试策略很近。
两种类型的回滚的Callback直接作为template.execute的参数,并依次执行。
retryContext是retryCallback.recover()的参数,从中可以得到上文传递过来的结果。
RetryTemplate,有诸多的execute方法,参数是callback。
回顾,第11章是一些不常用的高级特性,第十章是测试,第9章是回滚和重试即处理异常。
定义迭代器,用于将一堆零碎的时间打包,集体处理。
并行处理。
监听器。
异常处理。
完成策略。
重复模板,包括重复上下文,重复状态。
第8章,repeat。用于一系列细小常见的同类事件,集体处理。
结束哦。明天再看。
继续拉,依然是从后往前看。
7.3.4 binding input data to steps 。
其中的input data 指来自数据库啊,平面文件,xml,而step是spring batch的最小执行单位,就像走路最小走一步。
7.4.2 partitioner
为新建一个step创建参数,注意,是新建,不包含step的restart。
7.4.1 partitionhandler,将stepExecution包装 ,发给远程的步骤。remote steps。就像网线一样,而不是电脑或者猫。。。
7.4
partition是将一个master step做成好几个slave step的干活,他也负责执行slave step。。。读者要杀我了。。解释不清,继续往前看。
7.3
remote chunking
啊,对了,这里就介绍remote了。
master step 通过 remote chunking 管理很多 slave step...
72.并行step
7.1 多线程 step
-----------------
第二部分,sample。李梓萌,例子们。
football,football有三步,
第一步Loadplayer
从csv文件中读出数据,使用spring的自带类,给该类配置属性mapper,而这个mapper是例子的类的。从而spring将csv文件的内容mapper成一个一个player对象..
第二步。loadGame
跟第一步差不多一样,使用spring自带类,配置一个mapper,而这个mapper是项目的。从而得到game对象。
第三步。统计:D,
从数据库中拿,sql语句在配置文件中,为spring自带类配置两个数据,一个是 sql,一个是mapper,mapper是项目的,sql也是项目的。。。
第三步的writer,,保存统计结果,项目自己的的jdbcWiter,为其配置属性dataSource。
------------------
配置文件:
datasource的来源。
main/resources/data-source-context.xml
main/resources/batch-oracle.properties
.properties内容:batch.jdbc.url = jdbc:oracle:thin:@oracle:1521:xe
上面这行很熟悉吧。
bean id="dataSourceInitializer" class="test.jdbc.datasource.DataSourceInitializer">这个所谓初始化,其实就是删掉batch过程使用的,与实际业务逻辑无关的数据库表,drop ...STEP_TABLE
-------------------
告一段落。开始着手搭建环境跑例子了。
FootballJobFunctionalTests JUNIT入口。相当于MAIN()..运行,发现缺少类。
加了若干依赖库。。
配置
data-source-context.xml中的bean id = environment的参数defaultValue为oracle(原值hsql).
修改main/resources/batch-oracle.properties的内容为真实环境。改url,user,password..
这是删除batch系统从数据库中的代码。在batch源码的,core中的sql文件oracle。
-- Autogenerated: do not edit this file
DROP TABLE BATCH_STEP_EXECUTION_CONTEXT ;
DROP TABLE BATCH_JOB_EXECUTION_CONTEXT ;
DROP TABLE BATCH_STEP_EXECUTION ;
DROP TABLE BATCH_JOB_EXECUTION ;
DROP TABLE BATCH_JOB_PARAMS ;
DROP TABLE BATCH_JOB_INSTANCE ;
DROP SEQUENCE BATCH_STEP_EXECUTION_SEQ ;
DROP SEQUENCE BATCH_JOB_EXECUTION_SEQ ;
DROP SEQUENCE BATCH_JOB_SEQ ;
第一个例子跑成了。football的例子。
samples/src/test/java/org/springframework/batch/sample/FootballJobFunctionalTests.java右键runas junit
所有的batch依赖的建表删表操作都由batch自己自动完成。
------------------------------
下面继续。
阅读定时任务的实现,并和自己系统上的使用quartz的定时合并,或者更新。
例子中JobLauncherDetailsTests用来做quartz的定时测试,分before,test两步。。。
quartz-job-lancher-context.xml中似乎包含所有quartz的特性,包括,
1,定时的
为
org.springframework.scheduling.quartz.SchedulerFactoryBean
<property name="cronExpression" value="0/10 * * * * ?" />设置triggers参数。。
,2<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">这中结构在quartz中也常见。
3。<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
在这里,这个xml就完了。。
---------------------
另外,例子中,用来测试batch_quartz的
JobLauncherDetailsTests中,创建JobLauncherDetails对象,junit的setup将更新的值转存到测试用例的对象里。如在JobLauncherDetailsTests中。
而在各个方法里,分别创建创建quartz的jobDetail对象,将jobDetail设置到Context中,用JobLauncherDetails执行context。
createNiceMock用来根据class创建对象。。。
------
比较上面的xml和test,共同出现的类
org.springframework.batch.sample.quartz.JobLauncherDetails
不同,
1xml:
org.springframework.scheduling.quartz.CronTriggerBean
test:
import org.quartz.Scheduler;
import org.quartz.SimpleTrigger;
import org.quartz.spi.TriggerFiredBundle;
2xml
org.springframework.scheduling.quartz.JobDetailBean
org.springframework.scheduling.quartz.SchedulerFactoryBean
3xml
<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />
<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
<bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
test
import org.quartz.JobExecutionContext;
import org.springframework.batch.core.configuration.JobLocator;
import org.springframework.batch.core.launch.JobLauncher;
可见,两者使用的类不大一样,不具备配对关系。
那么,既然junit不引用xml,那么xml被谁用呢,怎么用呢?
下次再看。
--------------------------
.lanch中出现了上面的xml,eclipse右键的run configuration 中有一个quartzLauncher,一切清晰了。
遇到复合条件的job,可以用eclipse右键run as 搞搞。等下确认。
-----
在spring batch sample上右键使用quartzLauncher运行,提示错误。
Referenced classpath provider does not exist: org.maven.ide.eclipse.launchconfig.classpathProvider
,
-------
似乎需要安装http://m2eclipse.sonatype.org/sites/m2e eclipse的mvn插件,注意,是eclipse的插件,为了在eclipse中执行mvn,而不是mvn的eclipse插件,后者通过mvn命令构造eclipse工程目录文件。
待确认。
------------
已确认。正确。但,官方的m2e不能下载,需要在csdn上下载。。不能使用eclipse update,需要离线包。
------
装好m2eclipse插件,右键spring-batch-sample,以quartz-launcher运行,可以出现1次成功,而后会出现错误,不过这个错误的提示说的很明白,任务已运行过,另外运行需要改变参数。。。所以这个错误也不算错误,故,上文说确认,正确。
在run configuration 中查看quartz-launcher,其运行参数为
quartz-job-launcher-context.xml jobs/footballJob.xml,main函数是,
org.springframework.batch.core.launch.support
Class JobRegistryBackgroundJobRunner
而在JobRegistryBackgroundJobRunner的api中,看到其main函数的参数例子为:
$ java -classpath ... JobRegistryBackgroundJobRunner job-registry-context.xml job1.xml job2.xml ...
。
一切清晰了吧。
前面的context.xml指quartz之类的有特性的任务加载器,后面则是各个任务的定义xml.
------------
下一步,就脱离标题了。跑题了。由于项目需求,定时跑报表,需要分离springbatchsample.如果把整个例子的工程提交出去,肯定会被剁成肉包子。。所以,将必须的分离出来,将没有用的例子剔除出去。
---
下一步,注意查看spring batch 中断点续传的特性,关注实现这类任务需要的类。
分享到:
相关推荐
《Spring Batch参考指南》是Spring框架的一个重要组成部分,专注于批量处理和大数据量操作。Spring Batch为开发者提供了一套全面的框架,用于构建可扩展、高效且健壮的批处理应用程序。下面将详细介绍Spring Batch的...
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
Spring Batch是一个开源的轻量级、全面的批处理框架,它是为了解决企业应用中的大规模数据处理需求而设计的。Spring Batch in Action是一本专注于Spring Batch框架的书籍,由Arnaud Cogoluègnes、Thierry Templier...
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...
通过阅读《Spring.Batch批处理框架.pdf》和源码,你将能够掌握 Spring Batch 的核心概念和实践技巧,为你的企业级应用开发带来高效、可靠的批量处理能力。同时,源码可以直接运行,提供了动手实践的机会,加深理解和...
Quartz和Spring Batch是两种非常重要的Java开源框架,它们在企业级应用开发中扮演着重要角色。Quartz主要用于任务调度,而Spring Batch则专注于批量处理。在这个“quartz_springbatch_dynamic”项目中,我们将看到...
Spring Batch是一个开源的轻量级批处理框架,它提供了一整套可复用的...同时,对于提供IT类书籍pdf下载的内容,虽然与Spring Batch框架无直接关联,但IT类书籍的阅读也能够加深对Spring Batch框架的理解和应用能力。
### 基于Spring Batch的大数据量并行处理 #### 概述 Spring Batch是一款用于高效处理大量数据的开源框架,特别适用于批处理任务。它由Spring Source与Accenture合作开发,结合了双方在批处理架构和技术上的优势,...
Work with all aspects of batch processing in a modern Java environment using a selection of Spring frameworks. This book provides up-to-date examples using the latest configuration techniques based on...
Spring Batch API(Spring Batch 开发文档).CHM。 官网 Spring Batch API,Spring Batch 开发文档
SpringBatch是一个轻量级、全面的批处理框架,它是Spring框架的一部分,专注于提供企业级的批处理能力。SpringBatch的核心理念是提供一个可扩展的架构,支持处理大量数据时的性能和复杂性,无论数据来自何种数据源。...
通过阅读“spring-batch-reference.pdf”这份文档,你可以深入了解Spring Batch 的设计理念、配置方法、最佳实践以及如何根据实际需求定制自己的批处理解决方案。这份文档对于开发者来说是一份宝贵的参考资料,帮助...
Spring Batch 是一个强大的、全面的批处理框架,用于处理大量数据的处理任务。它由 Spring 框架提供支持,因此具有高度的可配置性和可扩展性,适用于各种企业级应用。Spring Batch 4.0.0 版本是该框架的一个重要版本...
SpringBoot和SpringBatch是两个非常重要的Java开发框架,它们在企业级应用开发中扮演着重要角色。SpringBoot简化了Spring应用程序的配置和启动过程,而SpringBatch则专注于批处理任务,提供了一套全面且可扩展的解决...
Spring Batch是一本介绍如何使用Spring Batch框架来构建批处理应用程序的专业书籍。在软件行业中,随着各种趋势的发展,例如基于Web的应用、面向服务的架构(SOA)以及事件驱动的应用,批处理应用程序虽然存在已久,...
Spring Batch 是一个强大的、可扩展的Java框架,专门用于处理批量数据处理任务,包括大量数据库数据的读取、处理和写入。它被设计为在企业级应用中处理大规模、高吞吐量的工作负载。本篇文章将深入探讨如何利用...
mybatis、springBatch、mysql、quartz、spring、springMVC 部署说明: 本项目为两个数据库,由一个数据库的表向另外一个数据库的表做数据迁移,其中数据库脚本在:/src/main/resources/sql/下面(其中data_rep中的表...
Spring Batch 是一个强大的Java框架,专门用于处理批量数据处理任务。在Spring Batch中,分区处理是一种优化策略,它将大型工作负载分解成多个较小、独立的任务,这些任务可以在不同的线程或甚至不同的节点上并行...
spring batch3.x中文文档:http://www.kailing.pub/SpringBatchReference spring batch官方入门实例:https://projects.spring.io/spring-batch/ 简单的任务操作实现,当前项目只是一个demo,我也是初学,目前启动...
Spring Batch 是一个强大的Java框架,专门用于处理批量数据处理任务。在给定的"Spring Batch 示例程序"中,我们可以深入探讨这个框架的核心概念和在实际应用中的使用方式。该示例程序采用的是Spring 3作为基础框架,...