场景:
2.2.1.RELEASE
。 Account
存储库,其中包含用户及其电子邮件地址。处理状态包括
EMAIL_PROCESSING_FOR_THIS_ACCOUNT_HAS_STARTED
EMAIL_PROCESSING_FOR_THIS_ACCOUNT_HAS_ERROR
EMAIL_PROCESSING_FOR_THIS_ACCOUNT_SKIPPED_BECAUSE_OF_OPTOUT
EMAIL_PROCESSING_FOR_THIS_ACCOUNT_SUCCESSFUL
。如果我已实施此要求,我可以查询相关存储库以获取以下信息:“对于2013-W40日历周,用户John Doe的电子邮件状态是成功的。”
目前,我的Spring JavaConfig @Configuration
看起来像这样:
@Bean
public Job emailSpringBatchJob() {
return springBatchJobBuilderFactory.
get("job").
start( emailSpringBatchStep() ).
build();
}
@Bean
public Step emailSpringBatchStep() {
return springBatchStepBuilderFactory.
get("step").
<Account, MimeMessage> chunk(1).
reader( accountReader() ).
processor( accountToMimeMessageProcessor() ).
writer( mimeMessageWriter() ).
build();
}
@Bean
public ItemReader<Account> accountReader() {
IteratorItemReader<Account> itemReader = new IteratorItemReader<>( accountRepository.getAllAccounts() );
return itemReader;
}
@Bean
public ItemProcessor<Account, MimeMessage> accountToMimeMessageProcessor() {
SomeMailProcessor itemProcessor = new SomeMailProcessor();
// plus some configuration for itemProcessor
return itemProcessor;
}
@Bean
public ItemWriter<MimeMessage> mimeMessageWriter() {
MimeMessageItemWriter itemWriter = new MimeMessageItemWriter();
//plus some configuration for itemWriter
return itemWriter;
}
现在我找不到“正确的方法”来实现保持每个电子邮件当前处理状态的要求:
ItemStream
并修补其提供的ExecutionContext
吗?ItemReadListener
,ItemProcessListener
和ItemWriteListener
吗?ExceptionHandler
吗?ItemReader
,ItemProcessor
和ItemWriter
类并放置任何类
有这个要求的业务逻辑吗?我可以利用Spring Batch的哪些部分来优雅地满足我的要求?
答案 0 :(得分:2)
处理这样的要求的典型方法是通过听众。这将处理本身的问题与国家管理分开。您可能希望查看各种基于项的侦听器之外的ChunkListener,因为一组项的状态应该一起移动。唯一不是这种情况的是EMAIL_PROCESSING_FOR_THIS_ACCOUNT_SKIPPED_BECAUSE_OF_OPTOUT状态,这需要一个ItemProcessListener。