我需要一个tasklet,将所有文件存储在arraylist目录中。列表的大小存储在作业执行上下文中。稍后,可以在另一个步骤中从另一个Tasklet访问此计数。它是如何做到的。我试图将其存储在jobexecution上下文中,在运行时抛出无法修改的集合异常,
public RepeatStatus execute(StepContribution arg0, ChunkContext arg1)
throws Exception {
StepContext stepContext = arg1.getStepContext();
StepExecution stepExecution = stepContext.getStepExecution();
JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
jobContext.put("FILE_COUNT",150000);
还在步骤注释中存储了步骤执行参考。仍然无法实现。请让我知道如何在两个小任务之间共享数据。
你至少有4种可能性:
设定值
public class ChangingJobExecutionContextTasklet implements Tasklet {
/** {@inheritDoc} */
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// set variable in JobExecutionContext
chunkContext
.getStepContext()
.getStepExecution()
.getJobExecution()
.getExecutionContext()
.put("value", "foo");
// exit the step
return RepeatStatus.FINISHED;
}
}
提取值
public class ReadingJobExecutionContextTasklet implements Tasklet {
private static final Logger LOG = LoggerFactory.getLogger(ChangingJobExecutionContextTasklet.class);
/** {@inheritDoc} */
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// pull variable from JobExecutionContext
String value = (String) chunkContext
.getStepContext()
.getStepExecution()
.getJobExecution()
.getExecutionContext()
.get("value");
LOG.debug("Found value in JobExecutionContext:" + value);
// exit the step
return RepeatStatus.FINISHED;
}
}
Tasklet是一个简单的任务管理框架,主要用于将一个大任务分割成许多较小的子任务,并管理这些子任务的执行。Tasklet主要有以下4个类: Task : 任务/子任务,多个Task组成一个完整的任务/功能。 Manager : 任务/子任务的执行入口。通过内部维护一个Task容器来管理要运行的Task。 Context : 为子任务提供运行环境的上下文消息和服务。 Launcher: 启动一个完
问题内容: 我知道有进程上下文和中断上下文,但是我不知道在执行softirq或tasklet时会在哪个上下文下运行。 我已经看到有些人使用“下半上下文”一词,如果有这样的话,与其他人相比有什么区别。 softirq和tasklet的另一个问题是为什么执行期间不允许睡眠? 谁能帮助我确定这些问题,谢谢! 问题答案: softirq和tasklet都是下半部机制。不允许睡眠,因为它们在中断上下文而不是
问题内容: 我在批处理作业中有执行不同操作的步骤。 但是在开始所有这些步骤之前,我需要清除一个表。有没有简单的方法可以编写Tasklet来直接从Job xml文件中删除表? 我正在使用ibatis作为ORM 问题答案: 您的意思甚至比Tasklet更简单,例如,像这样的伪代码?
我目前正在构建一个spring批处理应用程序,其中执行了几个步骤。除了一个,所有的步骤都是简单的tasklet(没有读取器或写入器),它们负责各种任务,如复制文件、发送请求、启动批处理(*.bat)文件等。 大多数步骤应该是串行执行的。在一个特定的步骤中,我希望启动X文件,这些文件最多可以有Y个实例。 null 如果:)我想我必须使用taskExecutor,下面我有一个示例,在这里我开始第一步(
问题内容: 我有以下内容: 我如何从另一个ViewController 访问? 我需要访问此功能: 问题答案: 默认情况下,swift中的所有内容都是公开的,因此,如果您声明以下内容: 只要拥有它的实例,就可以访问它:
我试图通过将其存储在ExecutionContext中来跟踪csv文件中每个项的lineNumber。Reader是一个带有修改过的Linemapper的FlatFileItemReader。下面是它的代码: 和例外: