2013-09-04 7 views
6

Ich habe Java-Web-Anwendung mit Spring, Hibernate, Tomcat7 & MySql. Ich verwende Datasource für Datenbankoperationen. Ich bin nicht sehr klar darüber, was ist der Standard-Speicherort zum Laden der JAR-Dateien (Tomcat-jdbc.jar & Mysql-connector.jar) aus? Es funktioniert, wenn ich BEIDE die Gläser entweder in CATALINA_HOME/lib/ oder webapps/myApp/WEB-INF/lib halte. Aber mir wurde gesagt, nur die Tomcat-jdbc von CATALINA_HOME/lib/und mysql-connector.jar von /WEB-INF/lib/ zu verwenden, die eine ClassNotFound Ausnahme für Sql Driver gibt. Kann jemand mich wissen lassen, welcher der richtige Ort für diese Gläser ist?Wo sollten sich die JAR-Dateien des JDBC-Treibers in einer Tomcat-Implementierung mit einer Datenquelle befinden?

<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

Haben Sie den MySQL-Treiber auf Ihrem Klassenpfad? – NickJ

+0

Ja. /WEB-INF/lib/mysql-connector.jar – PeterGriffin

+0

Lesen Sie auch [Apache Tomcat 6.0 Class Loader HOW-TO] (https://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html) –

Antwort

0

Wenn es um die Lage der Gläser entschieden werden, ist die Faustregel, dass:

  1. Verwenden Sie ein Glas in der Server-lib Lage.
  2. Wenn das JAR nicht verfügbar ist, fügen Sie dasselbe in den lib-Ordner der Anwendung ein.

Bootstrap Klassen Ihrer JVM

System-Class-Loader-Klassen (wie oben beschrieben)

/:

  • auf einen geeigneten Gläser, System sucht in den folgenden Repositories, in der Reihenfolge finden WEB-INF/Klassen Ihrer Webanwendung /WEB-INF/lib/*.jar von

    Ihre Webanwendung $ CATALINA_HOME/common/classes

    $ CATALINA_HOME/common/endorsed/*. Jar

    $ CATALINA_HOME/common/i18n/*. Jar

    $ CATALINA_HOME/common/lib/*. Jar

    $ CATALINA_BASE/shared/Klassen

    $ CATALINA_BASE/shared/lib/*. jar

  • +0

    Die Liste in dieser Antwort ist veraltet wie in späteren Versionen von Tomcat. Für Version 8.0, siehe [Class Loader HOW-TO] (https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html) und [diese Antwort] (http://stackoverflow.com)/a/265552/642706) zu einer ähnlichen Frage. –

    9

    das hängt davon ab, wer die Datenquelle ist die Verwaltung.

    Wenn Sie die Datenquelle in Ihrer eigenen Webanwendung wie new SomeDataSource() manuell erstellen und verwalten, dann kann die JAR-Datei des JDBC-Treibers in webapps /WEB-INF/lib platziert werden. Aber wenn appserver die gleiche JDBC-Treiber-JAR-Datei in seiner eigenen /lib bereits zur Verfügung stellen, dann könnten Sie auch nur davon Gebrauch machen.

    Wenn Sie jedoch appserver anweisen die Datenquelle wie von selbst zu verwalten und Sie nur Gebrauch davon in Ihrem Webapp über @Resource machen, etc, dann hat der JDBC-Treiber-JAR-Datei in appserver eigenen /lib platziert werden aus dem einfachen Grund, weil die Datenquelle beim Start des Appservers völlig unabhängig von (noch) zu installierenden Webanwendungen vorbereitet wird. Diese Datenquelle ist wiederum unter allen Webapps teilbar. Es würde technisch nicht funktionieren, wenn sich die JAR-Datei des JDBC-Treibers in einer der noch zu implementierenden Webapps befindet.

    +0

    Was passiert, wenn jede Anwendung verschiedene Datenbankanbieter verwendet? – PeterGriffin

    +2

    Sie können einfach mehrere Datenquellen erstellen. – BalusC

    +0

    FYI ... Siehe diese [detaillierte hilfreiche Antwort auch von BalusC] (http://Stackoverflow.com/a/2299870/642706) auf eine ähnliche Frage. –

    Verwandte Themen