Ove*_*esh 3 tomcat synchronization servlets jdbc prepared-statement
我正在寻找一种方法来缓存servlet环境中的预处理语句(特别是Tomcat 5.5).这意味着减少准备语句的创建次数,connection.prepareStatement(sql)即调用的次数.
我最初的想法是PreparedStatement在会话中存储对象,其中键(属性名称)是查询本身.这也可以懒惰地完成.
但是,有人提醒我这样的事实:根据JDBC驱动程序的实现,同一个预处理语句可能同时被2个线程(或请求)访问,例如,导致设置了错误的参数.因此,需要同步对这些语句对象的访问.
实现这一目标的好策略是什么?
是否有一个内置于tomcat的方法来执行此操作?我看到这个答案提到了poolPreparedStatementsDBCP参数,但是从文档中可以看出它是否与我正在寻找的含义相同.
PreparedStatement缓存通常由您使用的连接池提供.
请注意,在连接池工作的方式中,一个线程获取一个连接,将其用于某些SQL查询并将其返回到池中.只有这样,连接才可用于另一个线程.除非连接池中存在错误,否则不会同时在线程之间共享连接.
顺便说一句 - 我的建议是使用c3p0而不是DBCP.我转向c3p0后,解决了DBCP的很多问题.