Как использовать пул соединений JDBC без JNDI DataSource? (в 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. Это означает, что они определяют тег в context.xml своего приложения и используют поиск JNDI для получения DataSource, а также используют соединения так, как я это делаю.

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам