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