JDBC / Connectorj: когда загружать драйверы? - PullRequest
0 голосов
/ 26 июня 2011

Мне было интересно, как «правильно» загрузить драйверы для моего Java-сервлета.

В настоящее время у меня есть функция InitializeDrivers (), которую я вызываю в начале моего приложения.

public static boolean InitializeDrivers()
{
    try {
        Class.forName("com.mysql.jdbc.Driver");
        return true;
    } catch (ClassNotFoundException ex) {
        // log error
        return false;
    }
}

После этого я продолжаю выполнять различные запросы / вставки в базу данных в зависимости от полученного HTTP-запроса. Однако, поскольку мой сервлет может получать сотни запросов в секунду, InitializeDrivers () будет вызываться один раз для каждого запроса.

Это правильный способ сделать это, или есть способ загрузить драйверы только один раз?

1 Ответ

2 голосов
/ 26 июня 2011

Когда вы используете базу данных в сервлете, лучше позволить контейнеру сервлета управлять соединениями с базой данных через пул соединений, а не напрямую получать соединение с базой данных в сервлете.

Открытиеподключение к серверу базы данных является относительно медленной операцией.Кроме того, количество соединений, которые база данных может обрабатывать одновременно, ограничено.Ваше приложение будет медленным и не очень масштабируемым, когда вы открываете соединение с базой данных каждый раз, когда вам нужен доступ к базе данных.Кроме того, соединения с базой данных не являются поточно-ориентированными, поэтому вы не можете хранить соединение с базой данных в статической переменной-члене сервлета и использовать это каждый раз.

Пул соединений управляет рядом открытых соединений для вас (так чточто вам не нужно открывать соединение каждый раз, когда вам нужен доступ к базе данных), и управляет количеством соединений, которые открыты одновременно.Например, в Apache Tomcat вы можете настроить это так, чтобы вы искали объект javax.sql.DataSource через JNDI, который затем используете для получения объекта Connection.

На этой странице объясняется, как настроить Tomcat и использоватьa DataSource в вашем сервлете:

JNDI Источник данных HOW-TO

Если вы не хотите этого делать и хотите продолжать использовать соединения с базой данных из вашего сервлета(что я не рекомендую), тогда вы можете загрузить драйвер в блок статического инициализатора в вашем сервлете:

public class MyServlet extends HttpServlet {
    static {
        Class.forName("com.mysql.jdbc.Driver");
    }

    // ...
}

Обратите внимание, что в JDBC 4.0 загрузка драйвера явно больше не требуется;JDBC автоматически найдет драйверы, если они находятся в пути к классам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...