我想问一下使用Spring运行一个长进程的最佳方法是什么。我有一个web应用程序,当客户端发出请求时,它运行一个Spring控制器。该控制器将从请求中获取一些参数,然后运行查询并从数据库中获取记录。什么是使用Spring运行一个长进程的最佳方法
来自数据库的记录很高,我需要做一个可能需要很长时间的比较逻辑,所以我需要单独运行它。 当这个过程被执行时,它应该把最终的结果写入一个excel文件并发送给它。
我想问一下使用Spring运行一个长进程的最佳方法是什么。我有一个web应用程序,当客户端发出请求时,它运行一个Spring控制器。该控制器将从请求中获取一些参数,然后运行查询并从数据库中获取记录。什么是使用Spring运行一个长进程的最佳方法
来自数据库的记录很高,我需要做一个可能需要很长时间的比较逻辑,所以我需要单独运行它。 当这个过程被执行时,它应该把最终的结果写入一个excel文件并发送给它。
您可以使用注释@Async
立即返回。
Fisrt,写一个@Service
类来处理你的DB和Excel工作。
@Service
public class AccountService {
@Async
public void executeTask(){
// DB and Excel job
}
}
然后,在控制器方法触发任务
@Controller
public class taskController{
@RequestMapping(value = "as")
@ResponseBody
public ResultInfo async() throws Exception{
accountService.executeTask();
return new ResultInfo(0, "success", null);
}
}
最后,将它添加到应用程序的context.xml(Spring配置文件)
<task:annotation-driven executor="taskExecutor"/>
<task:executor id="taskExecutor" pool-size="10"/>
希望这将帮助你。
也建议查看“批处理”的“批处理”框架。它可以将执行时间减半。 – yname
感谢@Larrry的回应。但是我使用spring 2.5。是否有任何等价的机制在2.5中进行异步调用?如果没有,是否有任何其他方法来进行异步服务调用?请建议我! –
@用户518469 - 如果Spring Batch与异步调用相比使用,它如何减少执行时间。 –
Spring文档包含了专门用于异步任务执行的整章:http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/htmlsingle/#scheduling –