通过计划任务进行批量操作的正确方法?

时间:2012-12-26 06:48:38

标签: java spring hibernate scheduled-tasks bulk

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

2 个答案:

答案 0 :(得分:2)

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

由于您已经提到过使用Spring,因此可以考虑使用Spring Batch

  

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

查看Reference manual如何实施。

答案 1 :(得分: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/