Следующие инструкции основаны на инструкциях для Tomcat-5.x, доступного с http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html , который актуален в то время, когда этот документ был написан.
Во-первых, установите файл .jar
, который
идет с Connector/J в $CATALINA_HOME/common/lib
так, чтобы это было доступно всем приложениям, установленным в контейнере.
Затем формируйте JNDI DataSource, добавляя декларацию ресурса к
$CATALINA_HOME/conf/server.xml
в
контексте, который определяет ваше веб-приложение:
<Context ....> ... <Resource name="jdbc/MySQLDB" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/MySQLDB"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>maxActive</name> <value>10</value> </parameter> <parameter> <name>maxIdle</name> <value>5</value> </parameter> <parameter> <name>validationQuery</name> <value>SELECT 1</value> </parameter> <parameter> <name>testOnBorrow</name> <value>true</value> </parameter> <parameter> <name>testWhileIdle</name> <value>true</value> </parameter> <parameter> <name>timeBetweenEvictionRunsMillis</name> <value>10000</value> </parameter> <parameter> <name>minEvictableIdleTimeMillis</name> <value>60000</value> </parameter> <parameter> <name>username</name> <value>someuser</value> </parameter> <parameter> <name>password</name> <value>somepass</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.cj.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost:3306/test</value> </parameter> </ResourceParams> </Context>
Connector/J вводит средство вместо того, чтобы использовать значение
validationQuery
в
SELECT 1
, возможно использовать
validationQuery
со значением
/* ping */
.
Это посылает пинг в сервер, который тогда возвращает фиктивный набор
результатов. Это более легкое решение с точки зрения нагрузки.
У этого также есть то преимущество, что используя типы связи
ReplicationConnection
или
LoadBalancedConnection
, пинг
пошлют на все активные связи. Следующий отрывок XML иллюстрирует, как
выбрать этот вариант:
<parameter> <name>validationQuery</name> <value>/* ping */</value> </parameter>
Отметьте, что /* ping */
должен быть определен точно.
В целом следуйте за инструкциями по установке, которые идут с вашей версией Tomcat, поскольку способ, которым вы формируете источники данных в Tomcat время от времени меняется, и если вы будете использовать неправильный синтаксис в своем XML-файле, вы, скорее всего, закончите с исключением, подобным следующему:
Error: java.sql.SQLException: Cannot load JDBC driver class 'null ' SQL state: null
Отметьте что автозагрузка драйверов, имеющих класс
META-INF/service/java.sql.Driver
в JDBC 4.0
более поздних версиях, может быть причиной неподходящего развертывания
драйвера Connector/J Tomcat в Windows. А именно, Connector/J jar остается
блокированным. Это проблема инициализации, которая не связана с драйвером.
Возможные обходы следующие: используйте
"antiResourceLocking=true
" как атрибут контекста
Tomcat или удалите каталог META-INF/
.