Назад | Перейти на главную страницу

Как использовать пул соединений JDBC без источника данных JNDI? (в Apache Tomcat)

У меня есть сервер Apache Tomcat 7. У меня есть довольно сложное приложение Java Servlet, работающее на нем, которое требует некоторых запросов MySQL для POST. Таким образом, мне нужно подключение к базе данных MySQL для выполнения запроса. В настоящее время я использую следующий код Java для создания источника данных:

//db is for example: jdbc:mysql://127.0.0.1:3306/databasename
DataSource ds = new DataSource(initPoolProperties(db, user, pass));

private PoolProperties initPoolProperties(String db, String user, String pass)
{
    PoolProperties defaultPoolProperties = new PoolProperties();
    defaultPoolProperties.setUrl(db);
    defaultPoolProperties.setUsername(user);
    defaultPoolProperties.setPassword(pass);
    defaultPoolProperties.setDriverClassName("com.mysql.jdbc.Driver");
    // And a long list of properties here ...

    return defaultPoolProperties;
}

Во всем моем иерархическом приложении Java Servlet я создаю только один источник данных для каждого соединения с базой данных для каждого запроса POST (с помощью HTML-формы для просмотра веб-сайта). После этого я несколько раз использую ds.getConnection() чтобы получить соединение, необходимое для выполнения некоторых запросов MySQL.

Кажется, что все используют JNDI DataSource. Это означает, что они определяют тег в context.xml своего приложения и используют поиск JNDI для получения DataSource, а также используют соединения, как это делаю я.

Вопрос в том, делаю ли я здесь то же самое. Объединены ли соединения, которые я использую, в пул и используются ли они для нескольких посетителей / клиентов? Потому что мое онлайн-приложение для веб-сайта будет использоваться много, и некоторые страницы содержат довольно тяжелые SQL-запросы. И я не хочу рисковать, что человек будет ждать загрузки страницы дольше 0,01 секунды.

Я читал о том, как я это делаю (как показано выше в небольшом упрощенном примере кода) на этом веб-сайте: http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html Прокрутите немного вниз, и вы найдете раздел Good old 'Java, я думаю, это то же самое, что и использование, но я не уверен. Как я могу быть уверен в том, что мое приложение использует пул соединений и в любом случае делится ими между клиентами?

PS Я предпочитаю использовать PoolProperties вместо того, чтобы помещать что-то в context.xml, поскольку я использую несколько баз данных, которые определены в базе данных конфигурации. Выбранная база данных зависит от пользователя. Таким образом, мне легче поддерживать базы данных в программе администрирования MySQL, чем помещать также много кода в context.xml.

Если вы хотите использовать пул без использования встроенной функции, которую предоставляет Tomcat 7, вы должны управлять им самостоятельно (не рекомендуется) или ввести стороннюю библиотеку, такую ​​как c3p0, DBCP больше не рекомендуется: посмотреть здесь.

На мой взгляд, я бы определил все возможные источники данных в context.xml (чтобы получить преимущества от пула Tomcat 7 JDBC), и я реализую логику на уровне сервиса, чтобы выбрать, какой источник данных должен использоваться в соответствии с вашим контекстом. В Пружинный каркас может очень помочь в определении таких сервисов и DAO.