1

在我的应用程序中,我有一组计划任务,它们处理所有用户的数据并执行各种任务,如收入、税收计算、为所有用户生成报表。由于这些进程需要为每个用户运行,因此由于用户数量众多,它们需要花费大量时间(许多小时)。一个用户的数据处理完全独立于另一个用户,因此它们可以并行运行。我在这里有什么选择?进行此类大型/批量操作的最佳实践是什么。我们正在使用带有 spring、jpa 和 hibernate 的 J2SE 平台。

4

2 回答 2

2

你应该通过批处理做同样的事情。

既然您提到您正在使用 Spring,您可以考虑使用Spring Batch

Spring Batch 提供了在处理大量记录时必不可少的可重用功能,包括日志记录/跟踪、事务管理、作业处理统计、作业重新启动、跳过和资源管理。它还提供更先进的技术服务和功能,通过优化和分区技术实现极高容量和高性能的批处理作业。

查看有关如何实施的参考手册。

于 2012-12-26T09:18:09.747 回答
0

查看预定任​​务的 spring 文档:http: //static.springsource.org/spring/docs/3.0.x/reference/scheduling.html

我发现执行计划任务最简单的方法是使用 @Scheduled 注解,并且您可以使用 cron 样式计时。对于您的每个用户,您可以在不同的线程中为每个用户执行任务:

@Scheduled(cron="*/5 * * * * MON-FRI")
public void doSomething() {
    List<User> users = getUsers();
    for(User user: users) {
        MyTask task = new MyTask(user);
        Thread t = new Thread(task);
        t.start();
    }
}

确保 MyTask 是 Runnable。

如果你有大量的数据和用户,你可以看看 Spring Batch:http ://static.springsource.org/spring-batch/

于 2012-12-26T09:20:47.057 回答