我有一個web服務,它在初始化時實例化一個帶有數據源的單個QueryRunner。它使用這個QueryRunner
對象來處理來自webapp使用的多個不同servlet的所有servlet請求,並將它作爲servlet上下文屬性傳遞。 I .: .:DBUtils QueryRunner實例化
// in servlet context listener (on app initialization)
QueryRunner myQueryRunner = new QueryRunner(myDataSource);
myServletContext.setAttribute("queryRunner", myQueryRunner);
// in the servlets
QueryRunner myQueryRunner = (QueryRunner) myServletContext.getAttribute("queryRunner");
myQueryRunner.query(myStoredProcedure, handler, params)
我想弄清楚如果這是一個瓶頸。 servlet是否應該用每個請求來實例化一個新的QueryRunner
?
四處尋找答案時,我也發現這AsyncQueryRunner。但是我更加困惑,因爲在QueryRunner和AsyncQueryRunner的API文檔中的解釋說的完全一樣。
我查看了示例here,它似乎應該實例化每個請求,但我不確定是否僅僅因爲它是示例代碼。
換句話說,使用DBUtils當QueryRunner
應該我:
- 使用單一
QueryRunner
實例爲每個請求? (我現在在做什麼 ) - 用每個servlet請求實例化一個新的
QueryRunner
? - 每個請求使用一個單一的
AsyncQueryRunner
實例?
我想弄清楚這是否是一個瓶頸。這是不可能的。QueryRunner是一個線程安全的類,您可以爲所有請求使用一個QueryRunner。 AsyncQueryRunner使用ThreadPool來處理每個查詢,但它不是正常情況,它只用於長查詢花費。 – 2015-04-09 05:57:18