设想:
- 我正在使用 Spring Batch
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 的电子邮件状态为 SUCCESSFUL。 ”
目前,我的 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;
}
现在我一直在寻找“正确的方法”来实现保持每封电子邮件当前处理状态的要求:
- 我应该使用 Spring Batch
ItemStream
并对其提供的修补程序ExecutionContext
吗? - 我应该使用 Spring Batch 的
ItemReadListener
,ItemProcessListener
和ItemWriteListener
吗? - 我应该使用 Spring Batch 的
ExceptionHandler
吗? - 我是否应该扩展/编写自己的
ItemReader
、ItemProcessor
和ItemWriter
类并将与此要求相关的任何业务逻辑放在那里? - ?
我可以利用 Spring Batch 的哪些部分来优雅地满足我的要求?