4.SpringBatch-单线程TaskletStep详解

1. 开始执行一个Step

单线程的Step一般使用的实现类是TaskletStep
Step的执行从 Step抽象类 AbstractStep中的execute方法开始
这个方法完成了一下几个工作

1.1 Step执行前的准备工作

  • 更新StepExecution 也就是Step执行信息到存储库
  • 注册StepExecution
  • 触发Step监听器的beforeStep方法
  • 执行steam接口的open方法
    stepExecution.setStartTime(new Date());
	stepExecution.setStatus(BatchStatus.STARTED);
	getJobRepository().update(stepExecution);
	ExitStatus exitStatus = ExitStatus.EXECUTING;
	doExecutionRegistration(stepExecution);
	getCompositeListener().beforeStep(stepExecution);
	open(stepExecution.getExecutionContext());

1.2. 开始执行Step

  • 执行Step
  • 获取退出状态
  • 跟通信stepExecution中的状态
    doExecute(stepExecution);
    exitStatus = ExitStatus.COMPLETED.and(stepExecution.getExitStatus());

	if (stepExecution.isTerminateOnly()) {
   
   
		throw new JobInterruptedException("JobExecution interrupted.");
	}

	stepExecution.upgradeStatus(BatchStatus.COMPLETED);

1.3. Step异常处理

    stepExecution.upgradeStatus(determineBatchStatus(e));
	exitStatus = exitStatus.and(getDefaultExitStatusForFailure(e));
	stepExecution.addFailureException(e);

1.4. Step收尾处理

  • 计算退出状态
  • 更新StepExecutionContext到资源库
  • 更新StepExecution到资源库
  • 执行steam的close方法
  • 释放StepExecution
    exitStatus = exitStatus.and(stepExecution.getExitStatus());
	stepExecution.setExitStatus(exitStatus);
	exitStatus = exitStatus.and(getCompositeListener().afterStep(stepExecution));

	try {
   
   
		getJobRepository().updateExecutionContext(stepExecution);
	} catch (Exception e) {
   
   
		stepExecution.setStatus(BatchStatus.UNKNOWN);
		exitStatus = exitStatus.and(ExitStatus.UNKNOWN);
		stepExecution.addFailureException(e);
	}

	stepExecution.setEndTime(new Date());
	stepExecution.setExitStatus(exitStatus);

	try {
   
   
		getJobRepository().update
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值