Spring 批处理,通过作业的步骤可变
Spring Batch, variable through the steps of a job
我正在尝试在 Spring 批处理中创建工作,但我找不到任何东西。我的程序看起来像这样:
- 创建 ID 列表的 tasklet
- A Reader 使用此列表在数据库中获取字符串并将它们连接起来
- 一位作家
这个字符串并将其写入文件
- 一个使用id列表的tasket
并更新数据库。
首先,它是我批次结构的最佳选择吗?
主要问题是我不知道如何在Reader 和最后一个Tasklet 中获取id 列表。我正在使用 Spring 并且我试过这个:
<bean id="idList" class="java.util.ArrayList" scope="job" />
<bean id="myFirstTasklet" class="myFirstTasklet"
<property name="idList" ref="idList" />
</bean>
<bean id="myReader" class="myReader"
<property name="idList" ref="idList" />
</bean>
<bean id="mySecondTasklet" class="mySecondTasklet"
<property name="idList" ref="idList" />
</bean>
在创建 Reader 和第二个 tasklet 之前,tasklet 可以更新我的列表吗?
您可以将值放在tasklet 的ExecutionContext 中,然后在其他tasklet 中检索它。请看下面的代码:
在第一个 tasklet 中-
public RepeatStatus execute(StepContribution stepContribution,
ChunkContext chunkContext) throws Exception {
//Putting value in Execution Context
chunkContext.getStepContext().getStepExecution().getJobExecution()
.getExecutionContext()
.put(Constants.DATA_LIST, idList);
}
在第二个小任务中:
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception {
//Retrieving value from Execution context
(ArrayList) chunkContext.getStepContext()
.getStepExecution().getJobExecution().getExecutionContext()
.get(Constants.DATA_LIST);
}
同时确保将 tasklet 的范围标记为步骤:
<bean id="mySecondTasklet" class="mySecondTasklet" scope="step" >
我正在尝试在 Spring 批处理中创建工作,但我找不到任何东西。我的程序看起来像这样:
- 创建 ID 列表的 tasklet
- A Reader 使用此列表在数据库中获取字符串并将它们连接起来
- 一位作家 这个字符串并将其写入文件
- 一个使用id列表的tasket 并更新数据库。
首先,它是我批次结构的最佳选择吗?
主要问题是我不知道如何在Reader 和最后一个Tasklet 中获取id 列表。我正在使用 Spring 并且我试过这个:
<bean id="idList" class="java.util.ArrayList" scope="job" />
<bean id="myFirstTasklet" class="myFirstTasklet"
<property name="idList" ref="idList" />
</bean>
<bean id="myReader" class="myReader"
<property name="idList" ref="idList" />
</bean>
<bean id="mySecondTasklet" class="mySecondTasklet"
<property name="idList" ref="idList" />
</bean>
在创建 Reader 和第二个 tasklet 之前,tasklet 可以更新我的列表吗?
您可以将值放在tasklet 的ExecutionContext 中,然后在其他tasklet 中检索它。请看下面的代码:
在第一个 tasklet 中-
public RepeatStatus execute(StepContribution stepContribution,
ChunkContext chunkContext) throws Exception {
//Putting value in Execution Context
chunkContext.getStepContext().getStepExecution().getJobExecution()
.getExecutionContext()
.put(Constants.DATA_LIST, idList);
}
在第二个小任务中:
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext) throws Exception {
//Retrieving value from Execution context
(ArrayList) chunkContext.getStepContext()
.getStepExecution().getJobExecution().getExecutionContext()
.get(Constants.DATA_LIST);
}
同时确保将 tasklet 的范围标记为步骤:
<bean id="mySecondTasklet" class="mySecondTasklet" scope="step" >