我正在使用配置了注释的Spring Batch 3.0.3来创建一个批处理作业,该作业以不确定的次数重复一个步骤。
我的第一步是将重复步骤中使用的项目列表读入内存。我希望重复这些步骤来遍历这个工作范围列表。
如何将作业配置为运行相同的步骤x次?我在xml中看到了指定下一步运行的示例。我想我可以在一个无限循环中指向彼此的两个步骤,直到列表被迭代。这行得通吗?有没有办法通过注释来实现?下面是我的主配置文件,其中有些代码不起作用。
@ComponentScan(excludeFilters = @Filter(IgnoreDuringScan.class))
@EnableAutoConfiguration
@EnableBatchProcessing
@Loggable
public class BatchCrudConfiguration
{
@Bean
public Job batchCRUDJob(JobBuilderFactory jobBuilderFactory, Step[] processSheetSteps)
{
JobBuilder jobBuilder = jobBuilderFactory.get("batchCRUDJob").incrementer(new RunIdIncrementer());
FlowBuilder<FlowJobBuilder> jobFlowBuilder = jobBuilder.flow(processSheetSteps[0]);
for (int i = 1; i < processSheetSteps.length; i++)
{
jobFlowBuilder = jobFlowBuilder.next(processSheetSteps[i]);
}
return jobFlowBuilder.end().build();
}
@Bean
public Step[] processSheetSteps(
StepBuilderFactory stepBuilderFactory,
RawDataReader[] readers,
DelegatingWriter writer,
DelegatingProcessor processor,
@Value("${batchcrud.chunkSize}") int chunkSize)
{
int numberOfReaders = readers.length;
Step[] steps = new Step[numberOfReaders];
for (int i = 0; i < numberOfReaders; i++)
{
steps[i] = stepBuilderFactory.get("processSheet" + i + "Step").<RawData, DataItem>
chunk(chunkSize).reader(readers[i]).processor(processor).writer(writer).build();
}
return steps;
}
我将通过以下方式来实现这一点:
StepExecutionListener
,用于评估列表中是否有更多项目需要处理。如果是这样,它将返回映射到同一步骤的ExitStatus
。如果没有,它将返回一个映射到结束作业或继续作业(基于流的其余部分)的ExitStatus
例如:
StepExecutionListener
public class MyListener {
@Autowired
private List myItems;
@AfterStep
public ExitStatus afterStep(StepExecution stepExecution) {
if(myItems.size() > 0) {
return new ExitStatus("CONTINUE");
}
else {
return new ExitStatus("FINISHED");
}
}
}
作业配置
...
@Bean
public Step step1() {...}
@Bean
public MyListener listener() {..}
@Bean
public Step step2(MyListener listener) {
return stepBuilder.get("step2")
.tasklet(myTasklet()) // Replace this piece as needed
.listener(listener).build();
}
@Bean
public Job job1(Step step1, Step step2) {
return jobBuilder.get("job1")
.start(step1)
.next(step2).on("CONTINUE").to(step2).on("FINISHED").end()
.build();
}
...
注意:我还没有测试过这段代码,所以可能会出现拼写错误等。
我创建了一个图,它显示了一组数据和直方图。让我困扰的是,如下所示,直方图上的X轴有一个20步,因此最后一个值是140,而不是150,这严重触发了我的强迫症。有人能帮我修理它吗? 生成的png文件: https://i.stack.imgur.com/NhBYM.png 以及守则的有关部分: 非常感谢。
我必须在一次登录中运行多个案例的功能文件。对于ex: 场景:当用户使用“用户名”和“密码”登录并且用户检查“on”和用户检查“on”时,检查总计 示例: |用户名|密码|金额1|日期1|金额2|日期2|... 我需要在一次登录中检查日期金额,而在我的场景中,每次登录数据表中的每个条目。我如何实现它? 相反,我希望这样: 当用户使用“用户名”和“密码”登录时 示例: |用户名|密码|...只使用一次
遵循下面的引导,在 OS X 上构建 Electron . 前提 OS X >= 10.8 Xcode >= 5.1 node.js (外部) 如果你通过 Homebrew 使用 Python 下载,需要安装下面的 Python 模块: pyobjc 获取代码 $ git clone https://github.com/electron/electron.git Bootstrapping b
我将硒与cucumber一起使用(使用JAVA,但不太相关) 假设我有以下场景: 功能:示例功能 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,用户按“登录”,然后执行操作A 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,然后用户按“登录”,然后执行操作B 现在,将有数百个场景,网站总是需要登录到网站,所以我假设对于每个测试场景,我必须重复登录步
我有一个spring批处理作业,预计将根据FIFO顺序处理'N'个作业ID。这个Spring批处理作业有5个步骤。 我们使用DECIDER来确定是否有更多的job-id。如果是,请转到第一步并运行该job-id的所有步骤。 我在spring-batch发出的日志中看到“duplicate step”消息,在第一个作业中的步骤(例如job-id=1)获得未知状态之前,该消息似乎没有问题。在这种情况下
假设我有以下流程,开始- 我为每个步骤创建了tasklet并配置了一个作业,如上所述。当作业被触发时,执行一直到Step3,它会无限循环。那么在JobFlow中有没有一种方法可以多次执行一个步骤。 我使用的是Spring Batch 4.2.1。释放