Как использовать пул соединений 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.