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

spring batch JdbcPagingItemReader作业重新启动并只选择尚未选择的记录

梁韬
2023-03-14
    null
@Bean
public JdbcPagingItemReader<NotificationRequest> notificationRequestJdbcPagingItemReader() {
    JdbcPagingItemReader<NotificationRequest> reader = new JdbcPagingItemReader<>();

    reader.setDataSource(this.dataSource);
    reader.setFetchSize(1000);
    reader.setRowMapper(new SmsSQLRowMapper());

    PostgresPagingQueryProvider queryProvider = new PostgresPagingQueryProvider();
    queryProvider.setSelectClause("subscriber_fk, event_time, record_flag, batch_date, message_type, cents_loanable, request_id, reason_code");
    queryProvider.setFromClause("from tbl_sms_tracker_new");

    Map<String, Order> sortKeys = new HashMap<>(1);

    sortKeys.put("request_id", Order.ASCENDING);

    queryProvider.setSortKeys(sortKeys);

    reader.setQueryProvider(queryProvider);

    return reader;
}

@Bean
public ItemWriter<NotificationRequest> notificationRequestAmqpItemWriter() {
    AmqpTemplate aTemplate = (AmqpTemplate) applicationContext.getBean("amqpTemplate");

    AmqpItemWriter<NotificationRequest> itemWriter = new AmqpItemWriter<>(aTemplate);

    return itemWriter;
}


@Bean
public Step step1() {
    return stepBuilderFactory.get("notificationStep1")
            .<NotificationRequest, NotificationRequest>chunk(1000)
            .reader(notificationRequestJdbcPagingItemReader())
            .writer(notificationRequestAmqpItemWriter())
            .faultTolerant()
            .build();
}


@Bean
public Job job() {
    return jobBuilderFactory.get("notificationJob")
            .start(step1())
            .build();
}

共有1个答案

爱唯
2023-03-14

预期行为:

  1. 成功重新启动作业

如果突然停止作业(kill-9),那么JobRepository无法知道作业的当前状态,因为之前没有人告诉它。您的作业可能仍然处于started状态,而它不是(它已被杀死)。这就是为什么当试图重新启动一个被杀死的作业时会出现异常。您必须手动告诉作业存储库,您知道执行失败或应该被视为中止。有关这方面的更多详细信息:https://docs.spring.io/spring-batch/4.0.x/reference/html/job.html#aborting-a-job

 类似资料:
  • 我们当前的代码库具有以下重要特征: 一个代码库-但是很多批处理(我们在批处理之间重用代码) 目前,我们在代码库中有多个main()方法,并且只有不同的shell脚本来调用正确的main类。 我希望在Spring Batch中解决以下问题: null 提前谢了。

  • 问题内容: 我想选择一堆在大多数情况下都是唯一的记录,但是有一些记录会发生两次。我希望只能选择具有最新日期的记录。到目前为止,这是我的查询: 就检索具有重复项的记录的最新记录而言,这是可行的,但是那些没有重复项的记录根本不会出现。 感谢您的帮助,如果我错过了一些显而易见的事情,我深表歉意。我是SQL游戏的新手。 问题答案: 有几种方法可以执行此操作,一种方法是像这样使用ROW_NUMBER: 这将

  • 主要的问题是,如何更新表单中选择的几个字段。我想让用户选择他们想要更新的字段。例如,我有form类: 之后,我将在类中设置字段,例如,如果用户只想更改他们的名称和姓氏,我将通过方法从现有的中获取其余的字段,然后更改一些字段并将更改的对象保存到数据库中。

  • 在jenkins job中,是否可以有多个git存储库并根据参数动态选择存储库?

  • 我想调用一个函数时,选择的任何选项。类似于这样: 但不知何故不起作用。有人能帮忙吗。 请注意 我不想捕获更改事件,如果我选择已经选择选项,则不会触发更改事件

  • 问题内容: 我正在寻找一个SQL查询来选择所有未由同一表上的另一个查询选择的记录。具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中一个记录以外的所有记录。 因此,一条select语句可能类似于以下内容(不起作用!): 如果不可能进行单个查询,那么最有效的解决方案是什么? 问题答案: 具体来说,我想选择所有具有特定字段(’fieldA’)重复项的记录,然后删除除其中