У меня есть сервер 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.