Spring Batch 机制相当新——我设法让它启动并运行,但我的业务逻辑似乎不适合作为 Spring Batch 工作。请允许我解释一下:
该工作负责向用户发送电子邮件,如下所示:
- 获取满足特定条件的新闻项目集 (
Set<News>
) - 获取尚未收到新闻项目之一的用户集 (
Set<User>
) - 对于每个用户,为用户未收到的每个新闻发送一封电子邮件。
- “标记”已收到/已收到新闻的用户。
实体bean定义如下:
@Entity
public class News {
...
// ID with a sequence generator (more recent news have a higher ID value)
private Integer id;
...
}
@Entity
public class User {
...
// last received news;
private Integer lastReceivedNewsId;
...
}
两者之间没有一对多的关系,因此为了检索未收到的新闻,可以按如下方式检索:
SELECT n FROM db.news n
JOIN User u on n.id > u.lastReceivedNewsId;
我决定使用 Spring Batch,因为我的用户群目前为 28,000 并且还在增加,将步骤 1 和 2 设置为 ,将ItemReader
步骤 3 和 4 设置为ItemWriter
.
问题在于前两个步骤:我决定使用JpaPagingItemReader<T>
我的读者,但不幸的是它非常严格,以至于我只能指定一个查询,而不会更改将结果集映射到其他东西。在我的示例中,我首先需要获取一组新闻,然后根据收到的新闻 ( Tuple<User, Set<News>>
) 查询数据库以获取一组用户。
我该怎么做才能让我的读者返回一组用户和他/她未收到的新闻集?我错过了什么?
非常感激。如果您需要更多信息,请告诉我。