подробное объяснение проблемы пула соединений между Tomcat и MySQL (оригинал)
и, наконец, кое-что нашел, надеюсь, это будет полезно всем. Прежде всего, обратите внимание: здесь мы обсуждаем конкретно проблемы, возникшие в версии Tomcat 5.5. Почему эта версия особенно специфична, я объясню позже.
Вопрос 1. Невозможно создать драйвер JDBC класса '' для URL-адреса подключения 'null'.
отвечать:
[Анализ причин]
Многие друзья обнаружили, что указанная выше ошибка возникла при вызове пула соединений после настройки $Tomcat/conf/server.xml, $Tomcat/conf/context.xml или даже WEB-INF/web.xml. Анализируя причину ошибки, обычно это связано с тем, что мы не привязали источник данных (фактическая причина ошибки в том, что настройки driverClassName и url пусты, но мы обязательно не забудем установить это место, поэтому мы должны выполнили настройки без подключения!). Обычно существует два способа настройки источника данных (а не только метод настройки в $Tomcat/conf/context.xml). Первый — добавить следующий код перед </GlobalNamingResources> в $Tomcat/conf/server.xml:
Первый способ установки:
<Ресурс
name="jdbc/test" //Имя источника данных
тип = "javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" //Это настройка driverClassName, о которой я только что упомянул.
пароль="admin" //Пароль к базе данных
максИдле="2"
maxWait="5000"
username="root" //Имя пользователя базы данных
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //URL-адрес базы данных, который является только что упомянутым URL-адресом
maxActive="4"/>
За исключением комментариев, все параметры используются для установки количества подключений, статуса ожидания и статуса активности. Если вы просто проводите обучающий эксперимент, вам не нужно его менять. Эффект от этого метода эквивалентен настройке операций в графическом интерфейсе Tomcat.
Другой способ — добавить следующий код в <Context ...></Context> в $Tomcat/conf/server.xml:
Способ установки второй:
<Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/test">
<параметр>
<имя>фабрика</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</параметр>
<параметр>
<имя>имя пользователя</имя>
<value>корень</value>
</параметр>
<параметр>
<имя>пароль</имя>
<value>администратор</value>
</параметр>
<параметр>
<name>имякласса_драйвера</name>
<value>com.mysql.jdbc.Driver</value>
</параметр>
<параметр>
<имя>url</name>
<value>jdbc:mysql://localhost:3306/test?autoReconnect=true</value>
</параметр>
<параметр>
<name>начальный размер</name>
<value>20</value>
</параметр>
<параметр>
<name>maxActive</name>
<value>30</value>
</параметр>
<параметр>
<name>maxWait</name>
<value>10000</value>
</параметр>
</ResourceParams>
Обычная цель этого параметра — разрешить реализацию источника данных в отдельном каталоге сопоставления, то есть обычно этот код отображается в <Context docBase="конкретном каталоге (например, D:webappsmyjsp) " path="Имя доступа (например, /myjsp)" reloadable="true"></Context>, чтобы вы могли получить доступ к файлу в D:webappsmyjsp, открыв http://localhost:8080/myjsp/ XXX.jsp Затем страница jsp извлекает источник данных или выполняет другие операции для получения источника данных.
Проблема в том, что неважно каким способом никто не подключается! Если вы не используете ResourceLink, компонент или компонент не смогут найти установленный вами код. Как найти имя драйвера и URL-адрес? Фактически ни одна из настроек параметров не будет найдена!
[Решение]
Как только вы узнаете причину, решение будет проще. Независимо от того, какой метод вы используете.
Решение первое:
Если вы хотите реализовать ResourceLink в каталоге сопоставления, добавьте <ResourceLink global="имя источника данных" name="сопоставленное имя" type="javax.sql.DataSource" в середине <Context...></Context> "/>, обратите внимание: если вы не понимаете взаимосвязь кода, вам следует написать ее сразу после <Context...>.
Решение второе:
Если вы хотите сделать его глобальным и доступным для использования во всех каталогах сопоставления, просто напишите его в $Tomcat/conf/context.xml, и все будет в порядке.
Обычно все устанавливают одинаковое «имя источника данных» и «сопоставленное имя». Например, я установил это так: <ResourceLink global="jdbc/test" name="jdbc/test" type="javax. sql.Источник Данных" "/>.
Кроме того, следует отметить, что в Tomcat5.5, если вы настроите второй метод выше, даже если вы добавите ResourceLink, вы столкнетесь с проблемой неправильной работы.
Вопрос 2: javax.naming.NameNotFoundException: имя XXX не привязано в этом контексте
отвечать:
[Анализ причин]
В Tomcat5.5 установка источника данных в <Context...><Context> не работает должным образом. Я прочитал сообщение, написанное иностранцем. Мой уровень английского не высок, но я могу его понять. Он сказал, что это связано с тем, что в более высоких версиях (это должны быть Tomcat и dbcp) значение Factory было изменено с org.apache.commons.dbcp.BasicDataSourceFactory на org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory. Но я попробовал, и это не решило проблему. И я обнаружил, что стандартная версия Tomcat5.5 поставляется с dbcp, который находится в $Tomcatcommonlib. Я прочитал объяснение другого пользователя сети, и он сказал, что второй метод настройки невозможен. Это показывает, что второй метод настройки применим только к предыдущим версиям. Я не знаю, какую часть вносить изменения в текущей версии, но причина ошибки в том, что я хочу настроить ее вместе, а сервер не может найти. источник данных, соответствующий «имени источника данных».
[Решение]
Вы можете решить эту проблему, если знаете причину. Кажется, это работает, только если источник данных объявлен в <GlobalNamingResources>. Так что настроить Tomcat5.5 по первому способу настройки сможет каждый (поэтому я говорю именно о Tomcat5.5).
Вопрос 3. Невозможно загрузить класс драйвера JDBC «com.mysql.jdbc.Driver».
отвечать:
[Анализ причин]
Не только для MySQL, но и для других баз данных, пока он не может быть найден, будет выдана ошибка «Невозможно загрузить класс драйвера JDBC». Так почему же не удается найти класс драйвера базы данных? Как его найти? На самом деле это очень просто.
[Решение]
Просто скопируйте jdbc в $Tomcatcommonlib.
Вопрос 4: Невозможно установить соединение, пул исчерпан.
[Анализ причин]
Все очень просто. Соединение не может быть установлено, и пул соединений переполняется. Это означает, что ваши ресурсы соединения потрачены впустую, поскольку вы не переработали их вовремя.
[Решение]
Используйте метод close() быстро и правильно, чтобы освободить ResultSet, Statement и Connection. Я не буду вдаваться в подробности. Рекомендуется записать их в конце.
Резюме: Итак, если вы хотите использовать Tomcat5.5 для создания пула соединений с источником данных, вам нужно выполнить всего три шага.
Сначала: установите источник данных. Рекомендуется использовать графический интерфейс операций. Если вы делаете это вручную, добавьте следующий код перед </GlobalNamingResources> в $Tomcat/conf/server.xml:
<Resource.
name="jdbc/test" //Имя источника данных
тип = "javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver" //Это настройка driverClassName, о которой я только что упомянул.
пароль="admin" //Пароль к базе данных
максИдле="2"
maxWait="5000"
username="root" //Имя пользователя базы данных
url="jdbc:mysql://localhost:3306/test?autoReconnect=true" //URL-адрес базы данных, который является только что упомянутым URL-адресом
maxActive="4"/>
на свои собственные.
Второе: настройте соединение с ресурсом. Рекомендуется написать <ResourceLink global="имя источника данных" name="сопоставленное имя" type="javax.sql.DataSource"/> в $Tomcat/conf/context.xml, если вы хотите отобразить его в отдельном файле. Реализация каталога записывается после <Context...> в каталоге, который необходимо сопоставить в $Tomcat/conf/server.xml.
Третье: скопируйте JDBC в $Tomcatcommonlib.
Кроме того, я не буду здесь подробно объяснять, как вызвать источник данных. Эта проблема относительно проста, но обратите внимание, что DataSource ds=(DataSource)envCtx.lookup(" Ссылочный источник данных "); "Ссылочный источник данных" в операторе — это только "сопоставленное имя", а не "имя источника данных", поэтому для удобства я предлагаю вам установить одинаковые два имени. И особое внимание уделите своевременному освобождению простаивающих ресурсов, иначе пул соединений переполнится!
Выше приведены некоторые результаты моего сегодняшнего исследования. Я все еще новичок. Надеюсь, эта статья будет полезна всем. Если у вас есть какие-либо вопросы, свяжитесь со мной. Мой адрес электронной почты: [email protected] (люди, которые любят видеть неоновые огни). Оригинал этой статьи опубликован на neonlight.bokee.com (CSDN_MathMagician) и не может быть воспроизведен! 11 августа 2006 г.
http://blog.csdn.net/mathmagician/archive/2007/03/01/1518689.aspx