我正在构建一个执行数据库进程的Web服务(运行多个查询的SQL代码,然后在两个非常大的表之间移动数据),我假设某些进程可能需要2到10个小时才能执行。
从Java Web服务中执行长时间运行的数据库进程的最佳实践是什么(它实际上是基于REST的,使用JAX-RS和Spring)?该过程将在1次Web服务调用时执行。预计这次执行将每周进行一次。
提前致谢!
答案 0 :(得分:6)
它必须是异步的。
由于您的Web服务调用是RPC,因此最好让实现验证请求,将其放在队列中进行处理,然后立即发送回具有令牌或URL的响应以检查进度。
设置JMS队列并注册一个侦听器,将该消息从队列中删除并保留它。
如果确实需要2到10个小时,我建议您查看架构和查询,看看是否可以加快速度。在某个地方有一个索引丢失,我敢打赌。
答案 1 :(得分:1)
在我工作的地方,我目前正在针对这种情况评估不同的策略,只有时间不同。
根据您陈述的时间,您可以通过使用发布/订阅消息排队(ActiveMQ)来获得更好的服务。