首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

spring batch reference 翻阅随笔

2012-08-27 
spring batch reference 阅读随笔。这个,我是从后面往前读的。因为从前往后是在看不懂。?1。直接看 AppenedixB

spring batch reference 阅读随笔。

这个,我是从后面往前读的。因为从前往后是在看不懂。

?

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

上面这行很熟悉吧。

?

?-- Autogenerated: do not edit this fileDROP 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" />
??<bean id="jobLauncher" />
??<bean id="jobLauncher" />

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 中断点续传的特性,关注实现这类任务需要的类。

热点排行