Я ищу способ кэширования подготовленных операторов в среде сервлета (в частности, Tomcat 5.5). Это предназначено для уменьшения количества раз, когда создаются подготовленные операторы, то есть, сколько раз вызывается connection.prepareStatement(sql)
.
Моей первоначальной идеей было сохранение PreparedStatement
объектов в сеансе, где ключ (имя атрибута) - это сам запрос. Это также можно сделать лениво.
Однако кто-то предупредил меня о том, что, в зависимости от реализации драйвера JDBC, один и тот же подготовленный оператор может быть доступен для двух потоков (или запросов) одновременно, что приводит, например, к неправильной установке параметров. Следовательно, доступ к этим объектам операторов должен быть синхронизирован.
Что было бы хорошей стратегией для достижения этой цели?
Есть ли метод, встроенный в Tomcat для этого? Я вижу этот ответ , где упоминается параметр poolPreparedStatements
DBCP, но из документации не совсем ясно, несет ли он то же значение, что и я.