Как ограничить количество подключений к серверу SQL Server из развернутого Java-приложения tomcat? - PullRequest
2 голосов
/ 26 мая 2010

У меня есть приложение, которое развернуто на tomcat на сервере A и отправляет запросы к огромному количеству баз данных SQL Server на сервере B.

Я обеспокоен тем, что мое приложение может перегрузить этот сервер базы данных SQL Server, и хотел бы каким-то образом предотвратить его отправку запросов на подключение к любой базе данных на этом сервере, если какое-либо произвольное количество соединений уже существует и не закрыто.

Я смотрю на использование пула соединений, но у меня сложилось впечатление, что это будет только пул соединений с определенной базой данных на сервере SQL Server, я хочу контролировать общее количество этих комбинированных соединений, которые будут происходить со многими различными базами данных (случайно Я могу только узнать имена отдельных БД динамически, так как они меняются день ото дня). Пул соединений будет заботиться об этом для меня, я смотрю на это с неправильной перспективы?

У меня нет доступа к конфигурации сервера SQL Server.

Ссылки на учебники или рабочие примеры предложенного вами решения приветствуются!

Ответы [ 3 ]

1 голос
/ 26 мая 2010

Рассматривали ли вы использование DBCP? См. здесь для получения дополнительной информации

1 голос
/ 26 мая 2010

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

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

0 голосов
/ 26 мая 2010
connection pooling ... this will only pool connections to a specific database on the mssql server

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

want to control the total of these combined connections that will occur to many different databases

Не думаю, что вы можете контролировать количество подключений ко всем базам данных из пула. Вы написали, что у вас нет доступа к изменениям на сервере MSSQL. поэтому создание SYNONYMs для различных баз данных на MSSQL само по себе не вариант.

Вы можете написать свой собственный класс в приложении, скажем, ConnPoolManager, у которого есть внутренний счетчик до получения и освобождения соединений из любого из пулов. Этот класс должен кэшировать все поиски JNDI для каждого пула. Чтобы приложение могло подключиться к ЛЮБОМУ пулу, оно проходит через ConnPoolManager и, если счетчик показывает, что максимальный предел еще не пересечен, только тогда он получает соединение. В противном случае это исключение для вас, чтобы попытаться позже.

Для этого может использоваться шаблон проектирования по типу Business Delegate.

Сказав это, я думаю, что большая проблема для вас будет

incidentally I can only find out the names of individual db's dynamically as they change day to day

так как от вас ожидают, что вы будете ежедневно создавать новые или редактировать настройки пула соединений в Tomcat? Это кошмар обслуживания в будущем.

...