我有一个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