首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring batch重新启动作业从初始阶段开始,而不是从它停止的地方开始?

Spring Batch 是一个用于批处理应用程序的框架,它提供了丰富的功能来管理和执行批处理作业。默认情况下,Spring Batch 会在作业失败时记录当前步骤的状态,以便在重新启动作业时可以从上次失败的地方继续执行。然而,有时你可能希望作业在重新启动时从头开始执行,而不是从上次停止的地方继续。

基础概念

Spring Batch 的作业重启机制

  • Spring Batch 使用 JobRepository 来存储作业的执行状态。
  • 当作业失败时,Spring Batch 会记录当前步骤的状态,包括读取、处理和写入的数据量等信息。
  • 在重新启动作业时,默认情况下会从上次失败的地方继续执行。

如何让作业从头开始执行

如果你希望作业在重新启动时从头开始执行,可以通过以下几种方式实现:

1. 使用 JobParameters

每次启动作业时,传递不同的 JobParameters 可以使 Spring Batch 认为这是一个全新的作业实例。

代码语言:txt
复制
@Bean
public Job job(JobBuilderFactory jobBuilderFactory, Step step) {
    return jobBuilderFactory.get("job")
            .start(step)
            .build();
}

@Bean
public Step step(StepBuilderFactory stepBuilderFactory, ItemReader reader, ItemProcessor processor, ItemWriter writer) {
    return stepBuilderFactory.get("step")
            .<InputType, OutputType>chunk(10)
            .reader(reader)
            .processor(processor)
            .writer(writer)
            .build();
}

@SpringBootApplication
public class BatchApplication implements CommandLineRunner {

    @Autowired
    private JobLauncher jobLauncher;

    @Autowired
    private Job job;

    public static void main(String[] args) {
        SpringApplication.run(BatchApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        JobParameters params = new JobParametersBuilder()
                .addString("JobID", String.valueOf(System.currentTimeMillis()))
                .toJobParameters();
        jobLauncher.run(job, params);
    }
}

2. 使用 JobExecutionListener

你可以实现一个 JobExecutionListener,在作业开始前删除之前的执行记录。

代码语言:txt
复制
@Component
public class CustomJobExecutionListener implements JobExecutionListener {

    @Autowired
    private JobRepository jobRepository;

    @Override
    public void beforeJob(JobExecution jobExecution) {
        jobRepository.removeJobExecutionsByJobName("job");
    }

    @Override
    public void afterJob(JobExecution jobExecution) {
        // Do nothing
    }
}

然后在你的作业配置中添加这个监听器:

代码语言:txt
复制
@Bean
public Job job(JobBuilderFactory jobBuilderFactory, Step step, CustomJobExecutionListener listener) {
    return jobBuilderFactory.get("job")
            .start(step)
            .listener(listener)
            .build();
}

应用场景

  • 数据清洗:当你需要定期重新处理所有数据时。
  • 测试环境:在开发和测试阶段,可能需要多次从头开始运行作业以验证逻辑。
  • 数据重置:在某些情况下,可能需要重置数据状态,从头开始处理。

优势

  • 简化测试:在开发和测试阶段,可以轻松地从头开始运行作业,确保逻辑的正确性。
  • 数据一致性:在某些情况下,从头开始处理数据可以确保数据的一致性和完整性。

注意事项

  • 数据丢失风险:从头开始执行作业可能会导致之前已经处理过的数据被重新处理,需要注意避免数据重复或丢失。
  • 性能影响:如果作业处理的数据量很大,从头开始执行可能会消耗更多的时间和资源。

通过上述方法,你可以灵活地控制 Spring Batch 作业的重启行为,根据具体需求选择合适的策略。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

springbatch 批处理框架的介绍

由于第一次执行失败后,任务将停止等待第二次重启(第二次重启将从失败的位置开始)。...到01-02-2017 9:00 时候,第一次执行失败的任务将从失败的位置重新开始执行,而10-02-2017的任务也将开始执行,JobInstance被一个接一个地启动,除非两个作业因为同时访问相同的数据造...现观察相关表将有新的记录: 2.3、Step Step是一个领域对象,它体现了批处理作业的独立的、连续的阶段。 因此,每个工作都完全由一个或多个步骤组成。...还以上面EndOfDay示例,假定任务在第二天重新启动。当它重新启动时 上次运行的ExecutionContext从数据库中重新构造。...= null) { record = readLine(); } } 在这种情况下,在上面的代码运行之后,当前行是40,322,允许从它停止的地方重新开始。

1.3K10

spring batch数据库表数据结构

这些数据通常代表故障发生后必须检索的状态,以便JobInstance罐头能够“从停止的位置开始”。...ExecutionContext每个StepExecution数据只有一个,它包含了需要为特定步骤执行而保留的所有数据。...这些数据通常代表故障发生后必须检索的状态,以便JobInstance可以从停止的位置开始。...如果它已经运行并且作业不可重启,则会引发异常。 如果JobInstance未成功完成删除条目,则框架认为该作业是新的,而不是重新启动。...如果作业重新启动,框架将使用任何已持久保存的数据 ExecutionContext来恢复Job’s状态。因此,对于尚未成功完成的作业,从该表中删除任何条目可防止它们在再次运行时从正确的位置开始。

4.5K80
  • Spring batch批量处理框架最佳实践

    容错性 在Job执行期间非致命的异常,Job执行框架应能够进行有效的容错处理,而不是让整个Job执行失败;通常只有致命的、导致业务不正确的异常才可以终止Job的执行。 \2....可重启性 Job执行期间如果因为异常导致失败,应该能够在失败的点重新启动Job;而不是从头开始重新执行Job。...框架提供了支持上面所有能力的特性,包括Skip(跳过记录处理)、Retry(重试给定的操作)、Restart(从错误点开始重新启动失败的Job): Skip,在对数据处理期间,如果数据的某几条的格式不能满足要求...Restart,在Job执行失败后,可以通过重启功能来继续完成Job的执行。在重启时候,批处理框架允许在上次执行失败的点重新启动Job,而不是从头开始执行,这样可以大幅提高Job执行的效率。...批处理框架的不足与增强 Spring Batch批处理框架虽然提供了4种不同的监控方式,但从目前的使用情况来看,都不是非常的友好。

    1.8K10

    spring batch精选,一文吃透spring batch

    容错性 在Job执行期间非致命的异常,Job执行框架应能够进行有效的容错处理,而不是让整个Job执行失败;通常只有致命的、导致业务不正确的异常才可以终止Job的执行。 2....可重启性 Job执行期间如果因为异常导致失败,应该能够在失败的点重新启动Job;而不是从头开始重新执行Job。...框架提供了支持上面所有能力的特性,包括Skip(跳过记录处理)、Retry(重试给定的操作)、Restart(从错误点开始重新启动失败的Job): Skip,在对数据处理期间,如果数据的某几条的格式不能满足要求...Restart,在Job执行失败后,可以通过重启功能来继续完成Job的执行。在重启时候,批处理框架允许在上次执行失败的点重新启动Job,而不是从头开始执行,这样可以大幅提高Job执行的效率。...批处理框架的不足与增强 Spring Batch批处理框架虽然提供了4种不同的监控方式,但从目前的使用情况来看,都不是非常的友好。

    9.6K93

    一篇文章全面解析大数据批处理框架Spring Batch

    BATCH_JOB_EXECUTION:作业执行器表,用于存放当前作业的执行信息,比如创建时间,执行开始时间,执行结束时间,执行的那个Job实例,执行状态等。...可重启性 Job执行期间如果因为异常导致失败,应该能够在失败的点重新启动Job;而不是从头开始重新执行Job。 ?...框架提供了支持上面所有能力的特性,包括Skip(跳过记录处理)、Retry(重试给定的操作)、Restart(从错误点开始重新启动失败的Job): Skip,在对数据处理期间,如果数据的某几条的格式不能满足要求...Restart,在Job执行失败后,可以通过重启功能来继续完成Job的执行。在重启时候,批处理框架允许在上次执行失败的点重新启动Job,而不是从头开始执行,这样可以大幅提高Job执行的效率。...批处理框架的不足与增强 Spring Batch批处理框架虽然提供了4种不同的监控方式,但从目前的使用情况来看,都不是非常的友好。 ?

    4.2K60

    2019年Spring Boot不可错过的22道面试题!

    你用 Spring Boot 实现了它吗? 13、什么是 Spring Profiles? 14、什么是 Spring Batch? 15、什么是 FreeMarker 模板?...JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。...开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。...Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。...这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

    8.3K10

    SpringBoot 面试题及答案

    因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。 Spring Boot 是解决这个问题的方法。...JavaConfig 提供了一种类型安全的方法来配置 Spring 容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。...开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每 次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。...Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日 志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。...这是一种攻击,迫使最终用户在当前通过身份验证的 Web 应 用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻 击者无法查看对伪造请求的响应。 19.

    7.1K20

    面试之SpringBoot

    因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。 SpringBoot 是解决这个问题的方法。SpringBoot 已经建立在现有 spring 框架之上。...JavaConfig 提供了一种类型安全的方法来配置 Spring 容器。由于Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。...开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这 将消除每次手动部署更改的需要。 Spring Boot 在发布它的第一个版本时没有这个功能。...Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。...这是一种攻击,迫使最终用户在当前通过身份验证的 Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

    2.8K10

    2022 最新 Spring Boot 面试题 (一)

    因此 , 开始一个新的 spring 项目需要很多努力 , 因为我们现在必须从头开始做所 有事情。 Spring Boot 是解决这个问题的方法。...JavaConfig 提供了一种类型安全的方法来配置 Spring 容器 。由于 Java 5.0 对泛型的支持 ,现在可以按类型而不是按名称检索 bean,不 需要任何强制转换或基于字符串的查找。...开发人员可以重新加载 Spring Boot 上的更改, 而无需重新启动服务器 。这将消除每次手动部署更改的需要。Spring Boot 在发布 它的第一个版本时没有这个功能 。...Spring Boot Batch 提供可重用的函数 ,这些函数在处理大量记录时非常重要 ,包 括日志/跟踪, 事务管理, 作业处理统计信息, 作业重新启动, 跳过和资源管理。...这是一种攻击, 迫使最终用户在当前通过身份验证的 Web 应用程序上执行不需要的操作。 CSRF 攻击专门针对状态改变请求, 而不是 数据窃取, 因为攻击者无法查看对伪造请求的响应。

    18410

    2019年Spring Boot面试都问了什么?快看看这22道面试题!

    因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所有事情。 Spring Boot 是解决这个问题的方法。Spring Boot 已经建立在现有 spring 框架之上。...JavaConfig 提供了一种类型安全的方法来配置 Spring容器。由于 Java 5.0 对泛型的支持,现在可以按类型而不是按名称检索 bean,不需要任何强制转换或基于字符串的查找。...开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。...Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。...这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。

    4.4K10

    SpringBatch概述

    然而Spring Batch不是一个调度框架,它只关注于任务的处理,如日志监控、事务、并发问题等,但是它可以与其它调度框架一起联合使用,完成相应的调度任务,如Quartz、Tivoli、Control-M...Spring Batch提供了很多非常实用的组件,包括了日志/跟踪、事务管理、作业处理统计、作业重新启动、跳过和资源管理。...1.2、使用场景 简单一点来说,Spring Batch就是一个数据处理的框架,它的使用场景如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。 以修改后的形式写回数据。...) Start/Stop/Restart(启动/停止/再启动) Retry/Skip(重试/跳过) 2、Spring Batch框架结构 2.1 、Spring Batch分层结构 这种分层结构有三个重要的组成部分...应用层包含所有的批处理作业,通过Spring框架管理程序员自定义的代码。核心层包含了Batch启动和控制所需要的核心类,如:JobLauncher、Job和step等。

    1.2K10

    batch spring 重复执行_Spring Batch批处理

    Spring Batch批处理 批处理顾名思义是批量处理大量数据,但是这个大量数据又不是特别大的大数据,比Hadoop等要轻量得多,适合企业单位人数薪资计算,财务系统月底一次性结算等常规数据批量处理。...Spring Batch是一个用于创建健壮的批处理应用程序的完整框架。您可以创建可重用的函数来处理大量数据或任务,通常称为批量处理。...如Spring Batch文档中所述,使用该框架的最常见方案如下: •定期提交批处理 •并行处理作业的并发批处理 •分阶段,企业消息驱动处理 •大型并行批处理 •手动或故障后的计划重新启动 •依赖步骤的顺序处理...启动/停止/重新启动/跳过/重试功能,以处理过程的非交互式管理。 基于Web的管理界面(Spring Batch Admin),它提供了一个用于管理任务的API。...基于Spring框架,因此它包括所有配置选项,包括依赖注入。 符合JSR 352:Java平台的批处理应用程序。

    1.7K10

    Spring Batch实战(一)

    希望向企业IT环境提供标准的、经过验证的解决方案的公司和政府机构可以从Spring Batch中受益。...Spring Batch不是一个调度框架。商业和开放源码领域中都有许多优秀的企业调度器(如Quartz、Tivoli、Control-M等)。它旨在与调度器一起工作,而不是取代调度器。...Spring Batch提供了在处理大量记录时必不可少的可重用功能,包括日志/跟踪、事务管理、作业处理统计、作业重启、跳过和资源管理。...这个分层的体系结构突出了三个主要的高级组件:应用程序、核心和基础设施。该应用程序包含所有的批处理作业和开发人员使用Spring batch编写的自定义代码。...(1)定期提交批处理过程 (2)并发批处理:对作业进行并行处理 (3)分阶段的、企业消息驱动的处理 (4)大规模并行批处理 (5)故障后手动或定时重启 (6)依赖步骤的顺序处理(扩展到工作流驱动的批)

    1.6K30

    2022年Java秋招面试求职必看的Spring Boot面试题

    因此,开始一个新的 spring 项目需要很多努力,因为我们现在必须从头开始做所 有事情。 Spring Boot 是解决这个问题的方法。...开发人员可以重新加载 Spring Boot 上的更改,而无需重新启动服务器。这将消除每次手动部署更改的需要。Spring Boot 在发布它的第一个版本时没有这个功能。这是开发人员最需要的功能。...Spring Boot Batch 提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。...这是一种攻击,迫使最终用户在当前通过身份验证的Web 应用程序上执行不需要的操作。CSRF 攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。...3、单个 TCP 连接 -初始连接使用 HTTP,然后将此连接升级到基于套接字的连接。

    1.1K20

    springboot面试题(二)

    你用Spring Boot实现了它吗? Swagger广泛用于可视化API,使用Swagger UI为前端开发人员提供在线沙箱。...假设我们的要求是Swagger文档仅适用于QA环境,并且禁用所有其他文档。这可以使用配置文件来完成。Spring Boot使得使用配置文件非常简单。 3.什么是Spring Batch?...Spring Boot Batch提供可重用的函数,这些函数在处理大量记录时非常重要,包括日志/跟踪,事务管理,作业处理统计信息,作业重新启动,跳过和资源管理。...这是一种攻击,迫使最终用户在当前通过身份验证的Web应用程序上执行不需要的操作。CSRF攻击专门针对状态改变请求,而不是数据窃取,因为攻击者无法查看对伪造请求的响应。...在软件开发过程中,跨越应用程序多个点的功能称为交叉问题。这些交叉问题与应用程序的主要业务逻辑不同。因此,将这些横切关注与业务逻辑分开是面向方面编程(AOP)的地方。

    71711

    批处理框架 Spring Batch 这么强,你会用吗?

    Spring Batch不是一个schuedling的框架。...Spring Batch提供了可重用的功能,这些功能对于处理大量的数据至关重要,包括记录/跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。...大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...什么是Step 每一个Step对象都封装了批处理作业的一个独立的阶段。事实上,每一个Job本质上都是由一个或多个步骤组成。每一个step包含定义和控制实际批处理所需的所有信息。...此外,每个步骤执行都包含一个ExecutionContext,其中包含开发人员需要在批处理运行中保留的任何数据,例如重新启动所需的统计信息或状态信息。下面是一个从数据库当中截图的实例: ?

    3.4K20

    Spring认证指南-了解如何创建基本的批处理驱动解决方案

    如何完成本指南 像大多数 Spring入门指南一样,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。...要从头开始,请继续从 Spring Initializr 开始。...要跳过基础知识,请执行以下操作: 下载并解压本指南的源代码库,或使用Git克隆它:git clone https://github.com/spring-guides/gs-batch-processing.git...-all是所有平台的默认设置。 从 Spring Initializr 开始 您可以使用这个预先初始化的项目并单击 Generate 下载 ZIP 文件。此项目配置为适合本教程中的示例。...如果您的 IDE 具有 Spring Initializr 集成,您可以从您的 IDE 完成此过程。 你也可以从 Github 上 fork 项目并在你的 IDE 或其他编辑器中打开它。

    1K20

    批处理框架spring batch基础知识介绍「建议收藏」

    Spring Batch不是一个schuedling的框架。...Spring Batch提供了可重用的功能,这些功能对于处理大量的数据至关重要,包括记录/跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。...大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...在使用Spring batch的过程当中spring batch会自动创建一些表用于存储一些job相关的信息,用于存储JobExecution的表为batch_job_execution,下面是一个从数据库当中截图的实例...: 什么是Step 每一个Step对象都封装了批处理作业的一个独立的阶段。

    1.2K30

    批处理框架 Spring Batch 这么强,你会用吗?

    Spring Batch不是一个schuedling的框架。...Spring Batch提供了可重用的功能,这些功能对于处理大量的数据至关重要,包括记录/跟踪,事务管理,作业处理统计,作业重启,跳过和资源管理。...大批量批处理作业可以高度可扩展的方式利用该框架来处理大量信息。 Spring Batch架构介绍 一个典型的批处理应用程序大致如下: 从数据库,文件或队列中读取大量记录。 以某种方式处理数据。...什么是Step 每一个Step对象都封装了批处理作业的一个独立的阶段。事实上,每一个Job本质上都是由一个或多个步骤组成。每一个step包含定义和控制实际批处理所需的所有信息。...此外,每个步骤执行都包含一个ExecutionContext,其中包含开发人员需要在批处理运行中保留的任何数据,例如重新启动所需的统计信息或状态信息。下面是一个从数据库当中截图的实例: ?

    92510
    领券