Источник данных для веб-приложения Tomcat, Spring и Hibernate - PullRequest
0 голосов
/ 15 апреля 2010

Веб-приложение работает на Tomcat. Источник данных настроен с использованием конфигурации Spring, и используется Hibernate.

Если мы не можем использовать JNDI, что бы вы предложили использовать в качестве источника данных?

org.springframework.jdbc.datasource.DriverManagerDataSource будет в порядке? Это не очень хорошо, но, честно говоря, его можно использовать на производственном сервере, верно? Просто немного головной боли при слишком частом открытии соединения.

Также мы можем использовать BasicDataSource от Apache. Конечно, намного лучше, но вот в чем вопрос. ЕСЛИ МЫ НЕ ИСПОЛЬЗУЕМ JNDI, ТОГДА:

Если каждый экземпляр приложения будет создавать свою собственную копию DataSource, и каждый DataSource может иметь 5 открытых соединений, что мы получаем?
Num_of_running_apps * Num_of_max_active_connections = максимальное количество активных открытых соединений в БД для этого пользователя?



Второй вопрос: с точки зрения Hibernate, есть ли разница в том, какая реализация источника данных используется? Будет ли он работать независимо от того, с каким источником данных он работает идеально и стабильно?

1 Ответ

2 голосов
/ 15 апреля 2010

Если мы не можем использовать JNDI, что бы вы предложили использовать в качестве источника данных?

Конечно, не org.springframework.jdbc.datasource.DriverManagerDataSource в производстве, этот класс просто не является пулом соединений, как написано в javadoc:

ПРИМЕЧАНИЕ. Этот класс не является фактическим пулом соединений; фактически он не объединяет соединения. Он просто служит простой заменой полноценного пула соединений, реализуя тот же стандартный интерфейс, но создавая новые соединения при каждом вызове.

Полезно для тестовых или автономных сред вне контейнера J2EE, либо в качестве bean-компонента DataSource в соответствующем ApplicationContext, либо в сочетании с простой средой JNDI. Предполагая, что вызовы Connection.close() из пула просто закроют соединение, поэтому любой персистентный код с поддержкой DataSource должен работать.

Используйте автономный пул соединений, например C3P0 или DBPC . Лично я бы пошел на C3P0, который, как известно, ведет себя лучше, чем DBCP. Посмотрите c3p0 против dbcp на форумах Spring и этот предыдущий вопрос здесь, на SO.

Если каждый экземпляр приложения будет создавать свою собственную копию DataSource, и каждый DataSource может иметь 5 открытых соединений, что мы получим?

Общее количество соединений = количество экземпляров приложения x 5

с точки зрения Hibernate, есть ли разница в том, какая реализация источника данных используется?

Разницы нет. Hibernate будет использовать соединение, полученное из Spring.

...