当前位置: 首页 > 知识库问答 >
问题:

Spring Batch在schdeule上多次重新运行步骤

华易安
2023-03-14
@Scheduled(fixedRate=30*1000)
@SchedulerLock(name = "job-1", lockAtLeastFor = "15S", lockAtMostFor = "20S")
public void batchJob() throws InterruptedException {
JobParameters Parameters = new JobParametersBuilder()
    .addLong("startAt", System.currentTimeMillis()).toJobParameters();
try {
    jobLauncher.run(job, Parameters);
} catch (JobExecutionAlreadyRunningException | JobRestartException
    | JobInstanceAlreadyCompleteException | JobParametersInvalidException e) {

    e.printStackTrace();
}
     // Executes the job
  @Bean
  public Job jobUpdate(JobCompletionNotificationListener listener, Step step1) {
    return this.jobBuilderFactory.get("employee")
        .listener(listener)
        .incrementer(new RunIdIncrementer())
        .start(step1)
        .build();
  }


  @Bean
  public Step step1() {
    return stepBuilderFactory.get("step1")
        .allowStartIfComplete(true)
        .<Employee, Employee>chunk(2)
        .reader(reader())
        .processor(processor())
        .faultTolerant().skipPolicy(httpClientExceptionSkipper())
        .writer(compositeItemWriter())
        .build();
  }
2021-11-30 14:40:29.731  INFO --- o.s.b.c.j.SimpleStepHandler : Executing step: [step1]
2021-11-30 14:40:29.747  INFO --- o.s.b.c.s.AbstractStep : Step: [step1] executed in 16ms
2021-11-30 14:40:29.752  INFO --- l.d.d.b.n.JobCompletionNotificationListener : !!! JOB FINISHED! Time to verify the results
2021-11-30 14:40:29.756  INFO --- o.s.b.c.l.s.SimpleJobLauncher$1 : Job: [SimpleJob: [name=employee]] completed with the following 

如果有人能对此有所了解,我真的很感激。

共有1个答案

傅经业
2023-03-14

我在step1()方法上没有看到@jobscope,对吗?

此外,您应该将重新运行作业而不是步骤称为:)

通常,一个作业参数应该足以定义一个新的作业,因此不需要其他东西重新运行作业,在您的情况下是从作业参数中重新运行一个作业。

 类似资料:
  • 假设我有以下流程,开始- 我为每个步骤创建了tasklet并配置了一个作业,如上所述。当作业被触发时,执行一直到Step3,它会无限循环。那么在JobFlow中有没有一种方法可以多次执行一个步骤。 我使用的是Spring Batch 4.2.1。释放

  • 我正在使用postman编写一些测试脚本和数据清理脚本,我想知道是否可以对上一步产生的数组结果运行一个请求。 例如,我有一个API,它以JSON的形式返回任务,如下所示: 因此,在测试脚本中,我运行此命令来收集ID数组: 下一个请求是删除一个任务,但是API一次只删除一个。我试着做一些事情,比如: 我希望Postman会看到是一个数组和简单的“工作”,但事实似乎并非如此。有没有可能根据数组输入多次

  • 问题内容: 我完全不熟悉Greasemonkey,JavaScript,实际上是所有UI东西。 要求:页面加载后,用户脚本由GS运行一次。但是,我需要多次运行同一脚本而不刷新 用例:例如,Amazon.com搜索使用Ajax进行。我需要在搜索结果中嵌入自定义元素。 每次在同一页面上进行搜索时,我都需要将内容和结果一起注入到search-results-div中(没有页面刷新) 我当前的脚本仅在页面

  • 我创建了一个多线程步骤,最大线程限制为10; 在处理了200万条记录文件后,我可以在日志文件中看到创建的线程太多,即使我将限制设置为10个线程。你能告诉我为什么吗?非常感谢。 2019-07-02T17:02:298968129857信息[batch-thread35348]com。db。wmdl。价格档案。工作一批听众。PriceFileReaderListener([])-PriceFileR

  • 有人知道有没有办法在Spring重新开始吗?我希望它首先从第一步开始,然后是第二步,第三步,然后回到第一步,第二步,第三步,等等,直到满足条件。我试着用谷歌搜索,但没有找到任何具体的例子。 迄今为止的代码:

  • 问题内容: 我想依次运行每个选定的py.test项目任意次。 我没有看到任何标准的py.test机制来执行此操作。 我试图做到这一点。我修改了传入的项目列表,以多次指定每个项目。测试项目的第一次执行可以按预期工作,但是这似乎对我的代码造成了一些问题。 此外,我希望每次运行都具有唯一的测试项目对象,因为我在各种报告代码中都使用id(项目)作为键。不幸的是,我找不到任何py.test代码来复制测试项目