gpt4 book ai didi

spring-batch - 从 SkipListener 检索 ExecutionContext 的问题

转载 作者:行者123 更新时间:2023-12-04 03:12:27 32 4
gpt4 key购买 nike

我正在尝试从 SkipListener 中检索 Spring 批处理 ExecutionContext

这是我尝试过的(我依靠注释而不是接口(interface)来实现我的监听器):

import com.xxxx.domain.UserAccount;
import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.annotation.BeforeStep;
import org.springframework.batch.core.annotation.OnSkipInWrite;
import org.springframework.mail.MailSendException;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class MailSkipListener {

private StepExecution stepExecution;

@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}

@OnSkipInWrite
public void logSkippedEmail(UserAccount userAccount, Throwable t) {
if (t instanceof MailSendException) {
MailSendException e = (MailSendException) t;
log.warn("FailedMessages: " + e.getFailedMessages());
}
}
}

但是,logSkippedEmail 方法不会在引发 MailSendException 时执行。当我删除 saveStepExecution 方法时,在 MailSendException 的情况下再次执行 logSkippedEmail

我按如下方式注册我的 MailSkipListener:

@Bean
public Step messagesDigestMailingStep(EntityManagerFactory entityManagerFactory) {
return stepBuilderFactory
.get("messagesDigestMailingStep")
.<UserAccount, UserAccount>chunk(5)

...

.writer(itemWriter)
.listener(mailSkipListener)//Here
.build();
}

我在这里试图实现的是从我的 SkipListener 中检索一个 ExecutionContext。如何实现?似乎没有办法 Autowiring ExecutionContext

最佳答案

这是一个很老的问题,但我也一直在努力解决这个问题。我最终注册了两次 skiplistener 以使其工作,一次作为 StepExecutionListener,另一次作为 SkipListener。这很糟糕,但似乎有效:

@Bean
public Step messagesDigestMailingStep(EntityManagerFactory entityManagerFactory) {
return stepBuilderFactory
.get("messagesDigestMailingStep")
.<UserAccount, UserAccount>chunk(5)

...

.writer(itemWriter)
.listener((StepExecutionListener) mailSkipListener) // <--- 1
.listener((SkipListener) mailSkipListener) // <--- 2
.build();
}

关于spring-batch - 从 SkipListener 检索 ExecutionContext 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43987089/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com