Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 读取少量记录后,容错spring批处理作业卡住_Java_Spring Boot_Hibernate_Spring Batch - Fatal编程技术网

Java 读取少量记录后,容错spring批处理作业卡住

Java 读取少量记录后,容错spring批处理作业卡住,java,spring-boot,hibernate,spring-batch,Java,Spring Boot,Hibernate,Spring Batch,Im使用repository item reader从数据库读取事务,使用flatfileitem writer处理并写入文件。即时通讯使用容错跳过任何记录,如果它是错误的。为了检查记录是否有错误,我们在处理器中进行一些验证并抛出自定义异常 批配置 return stepBuilderFactory.get("test") .<Transaction, Transaction>chunk(1) .reader(this.reader

Im使用repository item reader从数据库读取事务,使用flatfileitem writer处理并写入文件。即时通讯使用容错跳过任何记录,如果它是错误的。为了检查记录是否有错误,我们在处理器中进行一些验证并抛出自定义异常

批配置

return stepBuilderFactory.get("test")
        .<Transaction, Transaction>chunk(1)
        .reader(this.reader.read())
        .processor(transactionProcessor)
        .writer(transactionWriter)
        .faultTolerant()
        .skipPolicy(new UnlimitedSkipPolicy()
        .listener(new TransactionSkipListenerTransaction())
        .stream(this.transactionwriter)
输出

无效事务1

无效事务2

无效事务9


卡在这里

在我看来,
过程
bean的职责是添加自定义转换或逻辑,在此基础上,数据将传递给编写器。在这种情况下,我只需记录错误,并在编写器处理空对象引用的情况下返回null,即无效事务(
null
)未传递给编写器。

但如果我们希望在记录出错时发送通知/电子邮件警报,该怎么办?在此过程中,我们可以抛出异常,该异常将由skip Listener拾取并从中得到通知。如果您想发送关于有多少记录出错的通知,那么您可以使用
StepListener
,并且对于每个出错项,可以使用
ItemProcessListener
进行通知。请共享调试日志的最后几行在工作陷入困境之前。有必要共享此详细信息,以了解作业被阻止的确切位置。否则,请提供一个复制问题的解决方案,以便能够以有效的方式帮助您。
 @Override
@StepScope
public RepositoryItemReader<Transaction> read() throws Exception {
    final ZonedDateTime zonedDateTime = LocalDate.now().atStartOfDay(ZoneId.systemDefault());
    final Date today = Date.from(zonedDateTime.toInstant());
    final Date yesterday = Date.from(zonedDateTime.minusDays(1L).toInstant());
    RepositoryItemReader<Transaction> reader = new RepositoryItemReader<>();
    reader.setRepository(transactionDao);
    reader.setMethodName("findByTransactionDateGreaterThanEqualAndTransactionDateLessThan");
    reader.setArguments(Arrays.asList(yesterday, today));
    reader.setSort(Collections.singletonMap("transactionId", Sort.Direction.ASC));
    reader.setPageSize(10000);
    return reader;
}


Processor bean 
@Override
public Transaction process(Transaction transaction) throws Exception {
if(utility.isInvalidTransaction(transaction)) {
  log.error("Invalid transaction {} and skipped from reporting", transaction.getTransactionId());
  throw new CustomException("invalid transaction" + transaction.getTransactionid());
}
.reader(this.reader.read())
        .processor(transactionProcessor)
        .writer(transactionWriter)
        .faultTolerant()
        .skipPolicy(new UnlimitedSkipPolicy()
        .noRetry(Exception.class)
        .noRollBack(Exception.class)