2013-09-04 4 views
6

У меня есть веб-приложение Java, использующее Spring, Hibernate, Tomcat7 & MySql. Я использую Datasource для операций с базой данных. Я не очень понимаю, что такое стандартное местоположение для загрузки файлов jar (Tomcat-jdbc.jar & Mysql-connector.jar) от? Он работает, если я держу BOTH банки в CATALINA_HOME/lib/ или webapps/myApp/WEB-INF/lib. Но мне сказали использовать только Tomcat-jdbc из CATALINA_HOME/lib/и mysql-connector.jar от /WEB-INF/lib/, что дает ClassNotFound Исключение для Sql Driver. Может ли кто-нибудь сообщить мне, что является правильным местом для этих банок?Где должны храниться JAR-файлы JDBC-драйвера в развертывании Tomcat с источником данных?

<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource" 
     destroy-method="close"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="${db.url}" /> 
     <property name="username" value="${db.username}" /> 
     <property name="password" value="${db.password}" /> 
     <property name="initialSize" value="${db.initialSize}" /> 
     <property name="minIdle" value="${db.minIdle}" /> 
     <property name="maxActive" value="${db.maxActive}" /> 
     <property name="maxIdle" value="${db.maxIdle}" /> 
     <property name="testWhileIdle" value="${db.testWhileIdle}" /> 
     <property name="minEvictableIdleTimeMillis" value="${db.minEvictableIdleTimeMillis}" /> 
     <property name="timeBetweenEvictionRunsMillis" value="${db.timeBetweenEvictionRunsMillis}" /> 
     <property name="validationQuery" value="${db.validationQuery}" /> 
    </bean> 
+0

У вас есть драйвер MySQL на пути к классу? – NickJ

+0

Да. /WEB-INF/lib/mysql-connector.jar – PeterGriffin

+0

Также читайте [Apache Tomcat 6.0 Class Loader HOW-TO] (https://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html) –

ответ

0

Когда дело доходит до места баночек, которые будут определены, то эмпирическое правило заключается в следующем:

  1. Используйте банку в серверном Lib месте.
  2. Если фляга недоступна, включите ее в папку lib приложения.
  3. Чтобы найти подходящие Баночки, система выглядит в следующих хранилищах, в следующем порядке:

Bootstrap классы вашей виртуальной машины Java

Системные классы загрузчика классов (описанных выше)

/WEB-INF/классы вашего веб-приложения /WEB-INF/lib/*.jar от

ваше веб-приложение $ CATALINA_HOME/common/classes

$ CATALINA_HOME/общие/одобрены/*. Баночка

$ CATALINA_HOME/общие/i18n/*. Банку

$ CATALINA_HOME/общее/Библиотека/*. Баночка

$ CATALINA_BASE/Shared/классы

$ CATALINA_BASE/Shared/Библиотека/*. баночка

+0

Список в этом ответе устарел, как и для более поздних версий Tomcat. Для версии 8.0 см. [Класс загрузчика HOW-TO] (https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html) и [этот ответ] (http://stackoverflow.com/a/265552/642706) к аналогичному вопросу. –

9

Это зависит от того, кто управляет источником данными.

Если вы вручную создаете и управляете источником данных в своем собственном webapp, например new SomeDataSource() и т. Д., Тогда JAR-файл JDBC-драйвера можно поместить в файл. Но если приложение-сервер окажется для того же самого JAR-файла JDBC-драйвера в своем собственном /lib, вы также можете его использовать.

Однако, если вы сообщаете сервер приложений для управления источника данных все само по себе, и вы просто использовать ее в вашем веб-приложение с помощью @Resource и т.д., то драйвер JAR-файл JDBC должен быть помещен в AppServer собственного /lib , по самой простой причине, потому что источник данных готов к запуску приложения-сервера полностью независимо от любых (бывших) развернутых веб-приложений. Этот источник данных, в свою очередь, доступен для всех веб-приложений. Это технически просто не работает, если JAR-файл JDBC-драйвера находится в одном из еще не развернутых веб-приложений.

+0

Что делать, если каждое приложение использует разные поставщики баз данных? – PeterGriffin

+2

Вы можете просто создать несколько источников данных. – BalusC

+0

FYI ... См. Этот [подробный полезный ответ также BalusC] (http://stackoverflow.com/a/2299870/642706) на аналогичный вопрос. –

 Смежные вопросы

  • Нет связанных вопросов^_^