我有一個web應用程序(java,tomcat),它允許用戶通過水晶報告生成報告。問題是如果用戶請求一個需要幾個小時才能完成的巨大報告,我的整個應用程序就會停下來。有沒有辦法阻止這樣的請求,比如5分鐘後它還沒有完成?除了優化速度和限制報告大小外,還有其他解決方法嗎?停止服務器請求
Q
停止服務器請求
1
A
回答
2
我認爲你沒有在另一個線程中運行你的報告生成。最好在另一個線程中運行報告生成,並在準備就緒時將鏈接發回給用戶。
您可以使用java的ExecutorService併爲線程設置一些超時,如果超過分配給它的時間,它將過期。
搜索Java的ExecutorService的,未來的,可贖回教程
示例代碼:
Callable<Integer> callable = new CallableImpl(2);
ExecutorService executor = new ScheduledThreadPoolExecutor(5);
Future<Integer> future = executor.submit(callable);
Integer result = future.get(600,TimeUnit.seconds));
+0
謝謝我會看看這個 – ha1ogen
1
另一種方法是在單獨的線程中運行報告生成(或者可能使用ExecutorService
),並在生成時間超過某個閾值時調用Thread.interrupt()
。如果當前阻塞I/O(網絡,數據庫),線程將被中斷。
相關問題
- 1. 停止請求服務器端
- 2. 在服務器端停止ajax請求
- 3. HAProxy - 從服務器停止提供服務請求
- 4. 閱讀請求暫停服務器
- 5. 停止瀏覽器請求
- 6. 停止黑客從錯誤請求的服務器過載
- 7. 在處理完一個請求後,Restlet停止服務器
- 8. 服務器在會話中過多後停止響應請求?
- 9. 如何停止向每個請求的服務器發送cookie
- 10. 停止請求+++++++++
- 11. 在服務器中阻止PHP請求
- 12. json請求服務器禁止IP
- 13. 阻止重複請求到服務器
- 14. 深入的服務器阻止請求
- 15. Sinatra - 通過請求終止服務器
- 16. SDWebImage:防止許多服務器請求
- 17. JBoss服務器停止
- 18. Nodejs服務器停止
- 19. 停止apache mina服務器
- 20. 停止Thrift服務器(TSimpleServer)
- 21. 停止RMI服務器(JAVA)
- 22. Lighttpd服務器停止
- 23. RMI服務器停止?
- 24. 停止EPiServer試圖服務請求到我的虛擬目錄
- 25. Android粘滯服務停止發送HTTP請求
- 26. IIS7停止服務文件的請求,但允許ajax回調
- 27. wcf服務在幾個請求後停止
- 28. 如何在ATL 7中拒絕Windows「服務停止」請求?
- 29. 阿帕奇突然停止服務請求 - mod_wsgi的
- 30. WCF服務停止發送Web請求,一旦它在IIS
_Why_您的應用程序停頓下來? –
,因爲報告生成佔用CPU和tomcat的memomey資源我認爲 – ha1ogen
在事務處理系統上運行這樣的報告不是一個好主意 - 你應該考慮重新設計... – home